From 2fccdecfb1ae720682276c0342e1c3902d8c9873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Thu, 23 Aug 2018 12:15:09 +0200 Subject: [build] add script to generate a standalone version of Mapbox GL --- cmake/mason-dependencies.cmake | 2 +- cmake/mason.cmake | 4 +-- platform/android/core-files.txt | 3 ++ scripts/standalone.cmake | 18 ++++++++++ scripts/standalone.sh | 78 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 scripts/standalone.cmake create mode 100755 scripts/standalone.sh diff --git a/cmake/mason-dependencies.cmake b/cmake/mason-dependencies.cmake index a143ec8ee6..3c6a535fc8 100644 --- a/cmake/mason-dependencies.cmake +++ b/cmake/mason-dependencies.cmake @@ -21,7 +21,7 @@ mason_use(vector-tile VERSION 1.0.2 HEADER_ONLY) if(MBGL_PLATFORM STREQUAL "android") mason_use(jni.hpp VERSION 4.0.0 HEADER_ONLY) elseif(MBGL_PLATFORM STREQUAL "ios") - mason_use(icu VERSION 58.1-min-size) + # noop elseif(MBGL_PLATFORM STREQUAL "linux") mason_use(glfw VERSION 2018-06-27-0be4f3f) mason_use(libuv VERSION 1.9.1) diff --git a/cmake/mason.cmake b/cmake/mason.cmake index 76d02b95b5..c0795d962c 100644 --- a/cmake/mason.cmake +++ b/cmake/mason.cmake @@ -208,8 +208,8 @@ endif() mason_detect_platform() -# Execute commands if CMake is run in command mode -if (CMAKE_ARGC) +# Execute commands if CMake is run in command mode\ +if (CMAKE_ARGC AND "${CMAKE_SCRIPT_MODE_FILE}" STREQUAL "${CMAKE_CURRENT_LIST_DIR}/mason.cmake") # Collect remaining arguments for passing to mason_use set(_MASON_ARGS) foreach(I RANGE 4 ${CMAKE_ARGC}) diff --git a/platform/android/core-files.txt b/platform/android/core-files.txt index cd4028cd59..4262489056 100644 --- a/platform/android/core-files.txt +++ b/platform/android/core-files.txt @@ -213,3 +213,6 @@ platform/android/src/java_types.hpp # Main entry point platform/android/src/jni.hpp platform/android/src/jni.cpp + +# GL +platform/android/mbgl/gl/gl_impl.hpp diff --git a/scripts/standalone.cmake b/scripts/standalone.cmake new file mode 100644 index 0000000000..b8bcbfa03f --- /dev/null +++ b/scripts/standalone.cmake @@ -0,0 +1,18 @@ +include(cmake/mason.cmake) + +# include once for every platform to get all dependency defines +set(MBGL_PLATFORM "android") +include(cmake/mason-dependencies.cmake) +set(MBGL_PLATFORM "ios") +include(cmake/mason-dependencies.cmake) + +get_cmake_property(_VARS VARIABLES) +foreach (_VAR ${_VARS}) + if (_VAR MATCHES "^MASON_PACKAGE_.+_NAME$") + set(_PACKAGE "${${_VAR}}") + if (MASON_PACKAGE_${_PACKAGE}_HEADER_ONLY) + file(RELATIVE_PATH _PREFIX "${CMAKE_CURRENT_LIST_DIR}/.." "${MASON_PACKAGE_${_PACKAGE}_PREFIX}") + message("${_PACKAGE} ${_PREFIX} ${MASON_PACKAGE_${_PACKAGE}_VERSION}") + endif() + endif() +endforeach() diff --git a/scripts/standalone.sh b/scripts/standalone.sh new file mode 100755 index 0000000000..80b9ac6931 --- /dev/null +++ b/scripts/standalone.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +cd "$(dirname "${BASH_SOURCE[0]}")/.." + +function usage { + echo "Usage: $0 [target]" + echo "" + echo " -c, --clean-target Removes all files in the target directory instead of overwriting them" + echo " -s, --skip [name] Skips vendoring the given dependency" + exit 1 +} + +CLEAN_TARGET=false + +ARGS=() +while [[ $# -gt 0 ]] ; do case "$1" in + -c|--clean-target) CLEAN_TARGET=true ; shift ;; + -s|--skip) shift ; DEP="$1" ; shift ; declare SKIP_$DEP=true ;; + *) ARGS+=("$1") ; shift ;; +esac ; done +set -- "${ARGS[@]}" + +if [ -z "$1" ]; then usage ; fi +TARGET="$1" + +if [ "$CLEAN_TARGET" = true ] ; then + echo ">> Cleaning target directory..." + rm -rf "$TARGET" +fi + +echo ">> Creating target directory..." +mkdir -p "$TARGET" +TARGET=$(cd "`pwd`/$TARGET"; pwd) + +echo ">> Creating file lists..." +cat cmake/core-files.txt cmake/filesource-files.txt > "$TARGET/files.txt" +mkdir -p "$TARGET/platform/android" +cat platform/android/*-files.txt > "$TARGET/platform/android/files.txt" + +echo ">> Copying source files..." +rsync -rR $(git ls-files \ + "include" \ + "src" \ + "platform/default" \ + "platform/android/mbgl" \ + "platform/android/src" \ + "platform/linux/src" \ + "platform/android/MapboxGLAndroidSDK/src/main" \ +) "$TARGET" + +echo ">> Copying vendored files..." +rsync -rR $(git ls-files \ + "vendor/expected" \ + "vendor/icu" \ + "vendor/nunicode" \ + "vendor/sqlite" \ +) "$TARGET" + +echo ">> Copying Mason dependencies..." +cmake -P scripts/standalone.cmake 2>&1 | while read DEPENDENCY ; do + DEPENDENCY=($DEPENDENCY) + if [ "[Mason]" = "${DEPENDENCY[0]}" ]; then + echo "${DEPENDENCY[@]}" + continue + fi + SKIP=SKIP_${DEPENDENCY[0]} + if [ "${!SKIP:-false}" = true ]; then continue ; fi + DESTINATION="$TARGET/vendor/${DEPENDENCY[0]}" + mkdir -p "$DESTINATION" + echo " - ${DEPENDENCY[0]}" + cp -r "${DEPENDENCY[1]}/" "$DESTINATION" + rm "$DESTINATION/mason.ini" + (cd "${DEPENDENCY[1]}" && find include -type f -name "*.hpp" -o -name "*.h") > "$DESTINATION/files.txt" + echo "${DEPENDENCY[2]}" > "$DESTINATION/version.txt" +done -- cgit v1.2.1