[build] add script to generate a standalone version of Mapbox GL

This commit is contained in:
Konstantin Käfer
2018-08-23 12:15:09 +02:00
parent bc9b224916
commit 2fccdecfb1
5 changed files with 102 additions and 3 deletions

View File

@@ -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)

View File

@@ -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})

View File

@@ -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

18
scripts/standalone.cmake Normal file
View File

@@ -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()

78
scripts/standalone.sh Executable file
View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
set -e
set -o pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
function usage {
echo "Usage: $0 <args> [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