diff options
-rw-r--r-- | Android.bp | 80 | ||||
-rwxr-xr-x | mkerofsimage.sh | 111 |
2 files changed, 191 insertions, 0 deletions
diff --git a/Android.bp b/Android.bp new file mode 100644 index 0000000..d759ec3 --- /dev/null +++ b/Android.bp @@ -0,0 +1,80 @@ +// +// Copyright (C) 2020 Gao Xiang +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_defaults { + name: "erofs-utils_defaults", + + cflags: [ + "-Wall", + "-Werror", + "-Wno-ignored-qualifiers", + "-Wno-pointer-arith", + "-Wno-unused-parameter", + "-DPACKAGE_VERSION=\"1.1\"", + "-DHAVE_FALLOCATE", + "-DHAVE_LINUX_TYPES_H", + "-DHAVE_LIBSELINUX", + "-DHAVE_LIBUUID", + "-DLZ4_ENABLED", + "-DLZ4HC_ENABLED", + "-DWITH_ANDROID", + ], + local_include_dirs: [ + "include", + ], + include_dirs: [ + "external/e2fsprogs/lib/", + ], + shared_libs: [ + "libcutils", + "libext2_uuid", + "libselinux", + ], + static_libs: [ + "liblz4", + ], +} + +cc_binary_host { + name: "mkfs.erofs", + + defaults: ["erofs-utils_defaults"], + + srcs: [ + "lib/*.c", + "mkfs/*.c", + ], + + target: { + darwin: { + enabled: false, + }, + }, +} + +sh_binary_host { + name: "mkerofsimage.sh", + src: "mkerofsimage.sh", + required: [ + "img2simg", + "mkfs.erofs", + ], + + target: { + darwin: { + enabled: false, + }, + }, +} diff --git a/mkerofsimage.sh b/mkerofsimage.sh new file mode 100755 index 0000000..89bf40e --- /dev/null +++ b/mkerofsimage.sh @@ -0,0 +1,111 @@ +#!/bin/bash +# +# To call this script, make sure mkfs.erofs is somewhere in PATH + +function usage() { +cat<<EOT +Usage: +${0##*/} SRC_DIR OUTPUT_FILE [-s] [-m MOUNT_POINT] [-d PRODUCT_OUT] [-C FS_CONFIG ] [-c FILE_CONTEXTS] [-z COMPRESSOR] [-T TIMESTAMP] [-U UUID] +EOT +} + +echo "in mkerofsimage.sh PATH=$PATH" + +if [ $# -lt 2 ]; then + usage + exit 1 +fi + +SRC_DIR=$1 +if [ ! -d $SRC_DIR ]; then + echo "Can not find directory $SRC_DIR!" + exit 2 +fi +OUTPUT_FILE=$2 +shift; shift + +SPARSE=false +if [[ "$1" == "-s" ]]; then + SPARSE=true + shift; +fi + +MOUNT_POINT= +if [[ "$1" == "-m" ]]; then + MOUNT_POINT=$2 + shift; shift +fi + +PRODUCT_OUT= +if [[ "$1" == "-d" ]]; then + PRODUCT_OUT=$2 + shift; shift +fi + +FS_CONFIG= +if [[ "$1" == "-C" ]]; then + FS_CONFIG=$2 + shift; shift +fi + +FILE_CONTEXTS= +if [[ "$1" == "-c" ]]; then + FILE_CONTEXTS=$2 + shift; shift +fi + +COMPRESSOR="lz4hc" +if [[ "$1" == "-z" ]]; then + COMPRESSOR=$2 + shift; shift +fi + +TIMESTAMP= +if [[ "$1" == "-T" ]]; then + TIMESTAMP=$2 + shift; shift +fi + +UUID= +if [[ "$1" == "-U" ]]; then + UUID=$2 + shift; shift +fi + +OPT="" +if [ -n "$MOUNT_POINT" ]; then + OPT="$OPT --mount-point $MOUNT_POINT" +fi +if [ -n "$PRODUCT_OUT" ]; then + OPT="$OPT --product-out $PRODUCT_OUT" +fi +if [ -n "$FS_CONFIG" ]; then + OPT="$OPT --fs-config-file $FS_CONFIG" +fi +if [ -n "$FILE_CONTEXTS" ]; then + OPT="$OPT --file-contexts $FILE_CONTEXTS" +fi +if [ -n "$TIMESTAMP" ]; then + OPT="$OPT -T $TIMESTAMP" +fi +if [ -n "$UUID" ]; then + OPT="$OPT -U $UUID" +fi + +MAKE_EROFS_CMD="mkfs.erofs -z $COMPRESSOR $OPT $OUTPUT_FILE $SRC_DIR" +echo $MAKE_EROFS_CMD +$MAKE_EROFS_CMD + +if [ $? -ne 0 ]; then + exit 4 +fi + +SPARSE_SUFFIX=".sparse" +if [ "$SPARSE" = true ]; then + img2simg $OUTPUT_FILE $OUTPUT_FILE$SPARSE_SUFFIX + if [ $? -ne 0 ]; then + exit 4 + fi + mv $OUTPUT_FILE$SPARSE_SUFFIX $OUTPUT_FILE +fi + |