aboutsummaryrefslogtreecommitdiffstats
path: root/testing/android-tools
diff options
context:
space:
mode:
authorSören Tempel <soeren+git@soeren-tempel.net>2018-02-25 10:43:22 +0100
committerSören Tempel <soeren+git@soeren-tempel.net>2018-02-27 12:29:49 +0100
commit517f35f1db49d9d9beb1eb4c3ba74092744eb3b7 (patch)
treee3eaa5e6a59921dc0ddc71e25264d5a4d8925158 /testing/android-tools
parent6146bc2b8f1b7cc95404b57983cf99b8cc34a729 (diff)
downloadaports-517f35f1db49d9d9beb1eb4c3ba74092744eb3b7.tar.bz2
aports-517f35f1db49d9d9beb1eb4c3ba74092744eb3b7.tar.xz
testing/android-tools: upgrade to 8.1.0_p7
This upgrade includes a ruby script for generating ninja build file instead of manually creating a Makefile. The ruby script is taken from the Arch Linux PKGBUILD. Patches have also been taken from Arch Linux but needed some modifications.
Diffstat (limited to 'testing/android-tools')
-rw-r--r--testing/android-tools/APKBUILD97
-rw-r--r--testing/android-tools/android-tools.patch826
-rw-r--r--testing/android-tools/generate_build.rb415
-rw-r--r--testing/android-tools/musl-fixes.patch327
4 files changed, 651 insertions, 1014 deletions
diff --git a/testing/android-tools/APKBUILD b/testing/android-tools/APKBUILD
index 26dcf390bb..5eed435169 100644
--- a/testing/android-tools/APKBUILD
+++ b/testing/android-tools/APKBUILD
@@ -1,27 +1,29 @@
# Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
# Maintainer: Sören Tempel <soeren+alpine@soeren-tempel.net>
pkgname=android-tools
-pkgver=7.0.0_p24
+pkgver=8.1.0_p7
_realver=${pkgver/_p/_r}
-pkgrel=2
+# See https://android.googlesource.com/platform/external/boringssl/+/$_realver/BORINGSSL_REVISION
+_boringssl=14308731e5446a73ac2258688a9688b524483cb6
+pkgrel=0
pkgdesc="Android platform tools"
url="http://tools.android.com/"
arch="all"
-license="Apache BSD"
+license="Apache-2.0 MIT"
depends=""
depends_dev=""
-makedepends="zlib-dev libressl-dev pcre-dev linux-headers bsd-compat-headers"
-install=""
-subpackages=""
-source="http://dev.alpinelinux.org/archive/$pkgname/$pkgname-core-$_realver.tar.gz
- http://dev.alpinelinux.org/archive/$pkgname/$pkgname-extras-$_realver.tar.gz
- http://dev.alpinelinux.org/archive/$pkgname/$pkgname-libselinux-$_realver.tar.gz
- http://dev.alpinelinux.org/archive/$pkgname/$pkgname-f2fs-tools-$_realver.tar.gz
- http://dev.alpinelinux.org/archive/$pkgname/$pkgname-safe-iop-$_realver.tar.gz
- http://dev.alpinelinux.org/archive/$pkgname/$pkgname-gtest-$_realver.tar.gz
-
- android-tools.patch
+makedepends="zlib-dev pcre2-dev linux-headers bsd-compat-headers go perl
+ ruby gtest-dev cmake ninja clang clang-dev libressl-dev libusb-dev"
+source="https://dev.alpinelinux.org/archive/$pkgname/$pkgname-core-$_realver.tar.gz
+ https://dev.alpinelinux.org/archive/$pkgname/$pkgname-extras-$_realver.tar.gz
+ https://dev.alpinelinux.org/archive/$pkgname/$pkgname-selinux-$_realver.tar.gz
+ https://dev.alpinelinux.org/archive/$pkgname/$pkgname-f2fs-tools-$_realver.tar.gz
+ https://dev.alpinelinux.org/archive/$pkgname/$pkgname-e2fsprogs-$_realver.tar.gz
+
+ $pkgname-boringssl-$_realver.tar.gz::https://github.com/google/boringssl/archive/$_boringssl.tar.gz
+
musl-fixes.patch
+ generate_build.rb
"
_giturl="https://android.googlesource.com/platform"
@@ -34,7 +36,7 @@ snapshot() {
mkdir -p "$srcdir" && cd "$srcdir"
local r=
- for r in system/core system/extras external/libselinux external/f2fs-tools external/gtest external/safe-iop; do
+ for r in system/core system/extras external/selinux external/f2fs-tools external/e2fsprogs; do
local n="${r##*/}.git"
local f=$pkgname-"${r##*/}"
@@ -49,36 +51,47 @@ snapshot() {
scp "$srcdir"/$pkgname-*-$_realver.tar.gz dev.alpinelinux.org:/archive/$pkgname/
}
+prepare() {
+ default_prepare
+
+ cd "$builddir"
+ ln -s boringssl-$_boringssl boringssl
+
+ PKGVER=$_realver \
+ CFLAGS="$CFLAGS -Wno-cpp" \
+ CXXFLAGS="$CXXFLAGS -Wno-#warnings" \
+ ruby ./generate_build.rb > build.ninja
+}
+
build() {
- make -C "$builddir" || return 1
+ mkdir -p "$builddir"/boringssl/build
+ cd "$builddir"/boringssl/build
+
+ cmake -GNinja \
+ -DBUILD_SHARED_LIBS=False \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_CXX_FLAGS="$CXXFLAGS" \
+ -DCMAKE_C_FLAGS="$CFLAGS" \
+ ..
+ ninja
+
+ cd "$builddir"
+ ninja
}
package() {
- make DESTDIR="$pkgdir" PREFIX=/usr \
- -C "$builddir" install || return 1
+ cd "$builddir"
+ mkdir -p "$pkgdir"/usr/bin
+ install -m755 fastboot adb mke2fs.android \
+ e2fsdroid ext2simg core/mkbootimg/mkbootimg \
+ "$pkgdir"/usr/bin
}
-md5sums="08f229c6a7ee88c9757f7dd204454fb0 android-tools-core-7.0.0_r24.tar.gz
-1ed5c25518727a3ae614163fa63b813b android-tools-extras-7.0.0_r24.tar.gz
-8d0d5abf79d0e56cc73cffd24f994224 android-tools-libselinux-7.0.0_r24.tar.gz
-d4923c0dc9508fa1d6299d633479e306 android-tools-f2fs-tools-7.0.0_r24.tar.gz
-5927ee8bddba0a8dcd4ffd3d8b56251e android-tools-safe-iop-7.0.0_r24.tar.gz
-b41dd596e7ec64b5d278952dc5415cd9 android-tools-gtest-7.0.0_r24.tar.gz
-883cfac28233868a458aab9cfc5da9a1 android-tools.patch
-4f1a962a06ce980cc1623e0cd3417a45 musl-fixes.patch"
-sha256sums="b6eac2868570c458418c9d9317a00d5ca2552eb33faa693a8014b928c71c1718 android-tools-core-7.0.0_r24.tar.gz
-7085bba77af11b7758a4146bc7b13aa2c3ba6ca0e15ccf9173bc86fc32bf5342 android-tools-extras-7.0.0_r24.tar.gz
-cd6ec4a1ba06e76dbb2e9eeaa06d23d39e48a21186a9bcc7522694ca1b603b3d android-tools-libselinux-7.0.0_r24.tar.gz
-53ae7ea6f7c28847ea249624681fc055b0e95b27f09a55946e22a8352aa91887 android-tools-f2fs-tools-7.0.0_r24.tar.gz
-7e961123b32bd0e6fd2d594508746bcaefb6e56990f3afc2c4891f25fcbd7a4d android-tools-safe-iop-7.0.0_r24.tar.gz
-8d8e482c14b39df2e5f9db9d0dec6696adeaaf8380de4a7afd76ee83ac702b7a android-tools-gtest-7.0.0_r24.tar.gz
-08686f177f6c1bd6901b43816aa83e5f1f3c512f583470b1a520b62d54c3d3e6 android-tools.patch
-e4423745d2ac88e24b42250b97345753c954218ec3fc98a1cb3f8b27016eab1f musl-fixes.patch"
-sha512sums="f2e054fb236518ce101ba3a17e578985a8e4884c127c113a3e702386abbb5077c647565c21575e1d2103c1f0316c7ddcfd8602b7eadf6955d01054842430ff18 android-tools-core-7.0.0_r24.tar.gz
-2dd2b571f17d44b2edb354eee9d913e8a004604fc56cf21bb14b7d081891912443bf7a7a543edad834082f93263b200bc0539200a6cb0a4109f502742529d53f android-tools-extras-7.0.0_r24.tar.gz
-3e985e01b4f1d413c4ffb7dea4fa6edc8350872df037eab1e3d109f6f19dcf94a7f77c9bc17d5f2838ebf6f773fb357cf9fb963caccb02b2613793d0e49f6a17 android-tools-libselinux-7.0.0_r24.tar.gz
-fbe08ddafa47d647884bb64202d4fceeabd88bcdba825dd9eb1257744b29a85317fe3cc34c991d9c8ba7838f9ab19d4b94fe2acaa3c6564f9d8689be0461b1b9 android-tools-f2fs-tools-7.0.0_r24.tar.gz
-baee83d6e0010f3884e9bd56c270294402be9eed2109871b9f2ebc833e35e506605c5d41dfea377e5e59b17b0dbbf4acee2759146d2465b5d2315eb212fa7299 android-tools-safe-iop-7.0.0_r24.tar.gz
-303d1b604bd8f8eff8d4d5d9518a43c2d4a96d5d4ca9c89d97120f987897261faa0fee4f22745d066b4a89cdbaeef15cca4cd08fab74340b94c22a8c4d312f4c android-tools-gtest-7.0.0_r24.tar.gz
-211fb8d6c37522b26306b75a3d1d2ee05f7c914f32b91a55cfea7375f5f5a99dae484ab11f798caea96de91bb9e345fb67efab19b12c779539fb15b2a687569b android-tools.patch
-75e09d7391dba7858cf50d98893c84986b5117e6b920109b0adb4a2e1215b8b85b427fb4e855402f21541cbf01a21430ed2d30296d041ba56c01d0c735334dca musl-fixes.patch"
+sha512sums="0592d04a12ee992750a2975c7c6eaa0db6001fcabdd046dd4385878600f5549d74c5b418306d29faa20f1aeb0342323f1a274d6209941ca6a09c696c267d0d4d android-tools-core-8.1.0_r7.tar.gz
+bd11d9b6c02f35715c8130f11f51ad74c1efbfe883a84c2c36bb6427de0d600494ffc5dfb9a6a60cca25b2410bd08c624fd319f01272e91afe983e72e8c9ea0d android-tools-extras-8.1.0_r7.tar.gz
+85a55a2b9ea2205a9fd81f04a899851b498745e11bd915db8297924ab1ed71fefc9a9ea3b360f8ed9798124bff590fd7408128f19b0ff36f6118407ed7318602 android-tools-selinux-8.1.0_r7.tar.gz
+9ead522e8e82d380833bb46b8b154f46f722ef6edd3f268ba992b746c1e896e61d3b8d92c69ef0862b7e00d8f8f54b9cc298de99a5ac80338ef91357f403e75b android-tools-f2fs-tools-8.1.0_r7.tar.gz
+722d30b43cbb7ff325927c1696cec02a4d0dbb4ded4b9016f35908d2e87d5f65875f9cbdbb935c3cb6c790ea722c3119240ad2f3adfb33e01a6a7ca62d69c158 android-tools-e2fsprogs-8.1.0_r7.tar.gz
+171b524b0452a48853b2c8010ff5e14d5d720e69eeaf1d3b79f675838f3afa94aee9de2f47b37303feb2d92cbf77639efe585786625b7b37b8cc2ba727c37fdc android-tools-boringssl-8.1.0_r7.tar.gz
+785e201dd8131a6dc49b6b40b54bc698a33cc9500ad2161187d2505541fddd68a66aac951f0794c0d852383bb4ae2f5bd9c37455b8777462b3e3c9fa7bfe455e musl-fixes.patch
+052bd5e602a600c21aaf30bd734dd6da37aaa62a0712a2a5cbb7f781bc2e59aad97516b65a6f985049307f849994a6b34a8646bd9b5eac247271ff5819b6a2e5 generate_build.rb"
diff --git a/testing/android-tools/android-tools.patch b/testing/android-tools/android-tools.patch
deleted file mode 100644
index 9052703861..0000000000
--- a/testing/android-tools/android-tools.patch
+++ /dev/null
@@ -1,826 +0,0 @@
-This patch has been taken from the Void Linux distribution.
-
-https://github.com/voidlinux/void-packages/tree/master/srcpkgs/android-tools/patches/android-tools.patch
-
-diff --git a/Makefile b/Makefile
-new file mode 100644
-index 000000000000..4644fc0b62ad
---- /dev/null
-+++ Makefile
-@@ -0,0 +1,47 @@
-+all:
-+ $(MAKE) -C core/libcutils all
-+ $(MAKE) -C libselinux all
-+ $(MAKE) -C core/libziparchive all
-+ $(MAKE) -C extras/ext4_utils all
-+ $(MAKE) -C core/libsparse all
-+ $(MAKE) -C core/libutils all
-+ $(MAKE) -C core/liblog all
-+ $(MAKE) -C core/base all
-+ $(MAKE) -C gtest all
-+ $(MAKE) -C extras/f2fs_utils all
-+ $(MAKE) -C core/adb all
-+ $(MAKE) -C core/fastboot all
-+
-+install: all
-+ $(MAKE) -C core/adb install
-+ $(MAKE) -C core/fastboot install
-+
-+clean:
-+ $(MAKE) -C core/libcutils clean
-+ $(MAKE) -C libselinux clean
-+ $(MAKE) -C core/libziparchive clean
-+ $(MAKE) -C extras/ext4_utils clean
-+ $(MAKE) -C core/libsparse clean
-+ $(MAKE) -C core/libutils clean
-+ $(MAKE) -C core/liblog clean
-+ $(MAKE) -C core/adb libdiagnose_usb
-+ $(MAKE) -C core/base clean
-+ $(MAKE) -C gtest clean
-+ $(MAKE) -C extras/f2fs_utils clean
-+ $(MAKE) -C core/adb clean
-+ $(MAKE) -C core/fastboot clean
-+
-+mrproper:
-+ $(MAKE) -C core/libcutils mrproper
-+ $(MAKE) -C libselinux mrproper
-+ $(MAKE) -C core/libziparchive mrproper
-+ $(MAKE) -C extras/ext4_utils mrproper
-+ $(MAKE) -C core/libsparse mrproper
-+ $(MAKE) -C core/libutils mrproper
-+ $(MAKE) -C core/liblog mrproper
-+ $(MAKE) -C core/adb libdiagnose_usb
-+ $(MAKE) -C core/base mrproper
-+ $(MAKE) -C gtest mrproper
-+ $(MAKE) -C extras/f2fs_utils mrproper
-+ $(MAKE) -C core/adb mrproper
-+ $(MAKE) -C core/fastboot mrproper
-diff --git core/adb/Makefile core/adb/Makefile
-new file mode 100644
-index 0000000..8ef539b
---- /dev/null
-+++ core/adb/Makefile
-@@ -0,0 +1,97 @@
-+adb_version := $(shell git -C . rev-parse --short=12 HEAD 2>/dev/null)-android
-+
-+SRCS+= \
-+ adb_client.cpp \
-+ client/main.cpp \
-+ console.cpp \
-+ commandline.cpp \
-+ file_sync_client.cpp \
-+ line_printer.cpp \
-+ services.cpp \
-+ shell_service_protocol.cpp \
-+
-+LIBADB_SRCS= \
-+ adb.cpp \
-+ adb_auth.cpp \
-+ adb_io.cpp \
-+ adb_listeners.cpp \
-+ adb_trace.cpp \
-+ adb_utils.cpp \
-+ fdevent.cpp \
-+ sockets.cpp \
-+ transport.cpp \
-+ transport_local.cpp \
-+ transport_usb.cpp \
-+ adb_auth_host.cpp \
-+ get_my_path_linux.cpp \
-+ sysdeps_unix.cpp \
-+ usb_linux.cpp \
-+
-+LIBDIAGNOSE_USB_SRCS= \
-+ diagnose_usb.cpp
-+
-+
-+override CXXFLAGS+= \
-+ -I. \
-+ -I../include \
-+ -I../base/include \
-+ -D_Nonnull="" \
-+ -D_Nullable="" \
-+ -D_GNU_SOURCE \
-+ -Wall \
-+ -Wextra \
-+ -Wno-unused-parameter \
-+ -Wno-missing-field-initializers \
-+ -Wvla \
-+ -DADB_REVISION='"$(adb_version)"' \
-+ -std=gnu++14 \
-+ -DADB_HOST=1 \
-+ -fpermissive \
-+ -fvisibility=hidden
-+
-+
-+LIBS= \
-+ ./libadb.a \
-+ ./libdiagnose_usb.a \
-+ ../base/libbase.a \
-+ ../libcutils/libcutils.a \
-+ ../liblog/liblog.a
-+
-+override LDFLAGS+= -lssl -lcrypto -lpthread
-+
-+OBJS= $(SRCS:.cpp=.o)
-+LIBADB_OBJS= $(LIBADB_SRCS:.cpp=.o)
-+LIBDIAGNOSE_USB_OBJS= $(LIBDIAGNOSE_USB_SRCS:.cpp=.o)
-+
-+BIN= adb
-+
-+all: $(BIN)
-+
-+adb: $(OBJS) libadb libdiagnose_usb
-+ $(CXX) -o $@ $(OBJS) $(LIBS) $(LDFLAGS)
-+
-+
-+libadb: libadb.a
-+
-+libadb.a: $(LIBADB_OBJS)
-+ $(AR) rcs $@ $(LIBADB_OBJS)
-+
-+libdiagnose_usb: libdiagnose_usb.a
-+
-+libdiagnose_usb.a: $(LIBDIAGNOSE_USB_OBJS)
-+ $(AR) rcs $@ $(LIBDIAGNOSE_USB_OBJS)
-+
-+%.o: %.cpp
-+ $(CXX) -c $< $(CXXFLAGS) -o $@
-+
-+install: adb
-+ install -Dm755 adb $(DESTDIR)$(PREFIX)/bin/adb
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS) $(LIBADB_OBJS) $(LIBDIAGNOSE_USB_OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN) *.a
-+
-diff --git core/base/Makefile core/base/Makefile
-new file mode 100644
-index 0000000..d3e7436
---- /dev/null
-+++ core/base/Makefile
-@@ -0,0 +1,37 @@
-+SRCS+= \
-+ file.cpp \
-+ logging.cpp \
-+ parsenetaddress.cpp \
-+ stringprintf.cpp \
-+ strings.cpp \
-+ test_utils.cpp \
-+ errors_unix.cpp
-+
-+override CXXFLAGS+= \
-+ -I./include \
-+ -I../include \
-+ -D__GLIBC__ \
-+ -Wall \
-+ -Wextra \
-+ -Werror \
-+ -std=gnu++14
-+
-+OBJS= $(SRCS:.cpp=.o)
-+
-+BIN= libbase.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.cpp
-+ $(CXX) -c $< $(CXXFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git core/base/errors_unix.cpp core/base/errors_unix.cpp
-index 296995e..3b983d3 100644
---- core/base/errors_unix.cpp
-+++ core/base/errors_unix.cpp
-@@ -17,6 +17,7 @@
- #include "android-base/errors.h"
-
- #include <errno.h>
-+#include <cstring>
-
- namespace android {
- namespace base {
-diff --git core/base/logging.cpp core/base/logging.cpp
-index 1741871..0aaae2e 100644
---- core/base/logging.cpp
-+++ core/base/logging.cpp
-@@ -33,6 +33,7 @@
- #include <limits>
- #include <sstream>
- #include <string>
-+#include <cstring>
- #include <utility>
- #include <vector>
-
-diff --git core/fastboot/Makefile core/fastboot/Makefile
-new file mode 100644
-index 0000000..6d81f7c
---- /dev/null
-+++ core/fastboot/Makefile
-@@ -0,0 +1,70 @@
-+fastboot_version := $(shell git -C . rev-parse --short=12 HEAD 2>/dev/null)-android
-+
-+SRCS+= \
-+ bootimg_utils.cpp \
-+ engine.cpp \
-+ fastboot.cpp \
-+ fs.cpp\
-+ protocol.cpp \
-+ socket.cpp \
-+ tcp.cpp \
-+ udp.cpp \
-+ util.cpp \
-+ usb_linux.cpp \
-+ util_linux.cpp
-+
-+
-+override CXXFLAGS+= \
-+ -I../mkbootimg/ \
-+ -I../base/include \
-+ -I../libsparse/include \
-+ -I../include \
-+ -I../adb \
-+ -I../../gtest/include \
-+ -I../../extras/ext4_utils \
-+ -I../../extras/f2fs_utils \
-+ -Wall \
-+ -Wextra \
-+ -Werror \
-+ -Wunreachable-code \
-+ -DFASTBOOT_REVISION='"$(fastboot_version)"' \
-+ -std=gnu++14
-+
-+LIBS= \
-+ ../libziparchive/libziparchive.a \
-+ ../../extras/ext4_utils/libext4_utils.a \
-+ ../libsparse/libsparse.a \
-+ ../libutils/libutils.a \
-+ ../liblog/liblog.a \
-+ ../adb/libdiagnose_usb.a \
-+ ../base/libbase.a \
-+ ../libcutils/libcutils.a \
-+ ../../gtest/libgtest.a \
-+ ../../extras/f2fs_utils/libf2fs.a \
-+ ../libcutils/libcutils.a \
-+ ../../libselinux/libselinux.a
-+
-+override LDFLAGS+= -lz -lpcre -lpthread
-+
-+OBJS= $(SRCS:.cpp=.o)
-+
-+BIN= fastboot
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(CXX) -o $@ $(OBJS) $(LIBS) $(LDFLAGS)
-+
-+%.o: %.cpp
-+ $(CXX) -c $< $(CXXFLAGS) -o $@
-+
-+install: fastboot
-+ install -Dm755 fastboot $(DESTDIR)$(PREFIX)/bin/fastboot
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git core/include/cutils/atomic.h core/include/cutils/atomic.h
-index ded972a..2ff6fce 100644
---- core/include/cutils/atomic.h
-+++ core/include/cutils/atomic.h
-@@ -19,7 +19,12 @@
-
- #include <stdint.h>
- #include <sys/types.h>
-+#ifdef __cplusplus
-+#include <atomic>
-+using namespace std;
-+#else
- #include <stdatomic.h>
-+#endif
-
- #ifndef ANDROID_ATOMIC_INLINE
- #define ANDROID_ATOMIC_INLINE static inline
-@@ -114,6 +119,7 @@ int32_t android_atomic_or(int32_t value, volatile int32_t* addr)
- return atomic_fetch_or_explicit(a, value, memory_order_release);
- }
-
-+#ifndef __cplusplus
- /*
- * Perform an atomic load with "acquire" or "release" ordering.
- *
-@@ -208,6 +214,7 @@ int android_atomic_release_cas(int32_t oldvalue, int32_t newvalue,
- memory_order_release,
- memory_order_relaxed));
- }
-+#endif
-
- /*
- * Fence primitives.
-diff --git core/include/log/log.h core/include/log/log.h
-index e606a84..963347a 100644
---- core/include/log/log.h
-+++ core/include/log/log.h
-@@ -38,6 +38,7 @@
- #include <log/uio.h>
-
- #ifdef __cplusplus
-+#include <cstring>
- extern "C" {
- #endif
-
-diff --git core/libcutils/Makefile core/libcutils/Makefile
-new file mode 100644
-index 0000000..ec9c573
---- /dev/null
-+++ core/libcutils/Makefile
-@@ -0,0 +1,59 @@
-+CSRCS+= \
-+ config_utils.c \
-+ fs_config.c \
-+ canned_fs_config.c \
-+ hashmap.c \
-+ iosched_policy.c \
-+ load_file.c \
-+ native_handle.c \
-+ open_memstream.c \
-+ process_name.c \
-+ record_stream.c \
-+ sched_policy.c \
-+ strlcpy.c \
-+ threads.c \
-+ fs.c \
-+ multiuser.c \
-+ socket_inaddr_any_server_unix.c \
-+ socket_local_client_unix.c \
-+ socket_local_server_unix.c \
-+ socket_loopback_client_unix.c \
-+ socket_loopback_server_unix.c \
-+ socket_network_client_unix.c \
-+ str_parms.c \
-+ ashmem-host.c \
-+ trace-host.c \
-+ dlmalloc_stubs.c
-+
-+CXXSRCS+= \
-+ sockets_unix.cpp \
-+ sockets.cpp \
-+ strdup16to8.c \
-+ strdup8to16.c
-+
-+override CFLAGS+= -I../include
-+
-+override CXXFLAGS+= -I../include
-+
-+COBJS= $(CSRCS:.c=.o)
-+CXXOBJS= $(CXXSRCS:.cpp=.o)
-+BIN= libcutils.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(COBJS) $(CXXOBJS)
-+ $(AR) rcs $@ $(COBJS) $(CXXOBJS)
-+
-+%.o: %.c
-+ $(CC) -c $< $(CFLAGS) -o $@
-+
-+%.o: %.cpp
-+ $(CXX) -c $< $(CXXFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(COBJS) $(CXXOBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git core/libcutils/fs.c core/libcutils/fs.c
-index 3f14de7..175df6a 100644
---- core/libcutils/fs.c
-+++ core/libcutils/fs.c
-@@ -79,7 +79,7 @@ static int fs_prepare_path_impl(const char* path, mode_t mode, uid_t uid, gid_t
- create:
- create_result = prepare_as_dir
- ? TEMP_FAILURE_RETRY(mkdir(path, mode))
-- : TEMP_FAILURE_RETRY(open(path, O_CREAT | O_CLOEXEC | O_NOFOLLOW | O_RDONLY));
-+ : TEMP_FAILURE_RETRY(open(path, O_CREAT | O_CLOEXEC | O_NOFOLLOW | O_RDONLY, mode));
- if (create_result == -1) {
- if (errno != EEXIST) {
- ALOGE("Failed to %s(%s): %s",
-diff --git core/liblog/Makefile core/liblog/Makefile
-new file mode 100644
-index 0000000..75a0af3
---- /dev/null
-+++ core/liblog/Makefile
-@@ -0,0 +1,39 @@
-+SRCS+= \
-+ log_event_list.c \
-+ log_event_write.c \
-+ logger_write.c \
-+ config_write.c \
-+ logger_name.c \
-+ logger_lock.c \
-+ fake_log_device.c \
-+ fake_writer.c \
-+ event_tag_map.c
-+
-+
-+override CFLAGS+= \
-+ -I../include \
-+ -DLIBLOG_LOG_TAG=1005 \
-+ -DSNET_EVENT_LOG_TAG=1397638484 \
-+ -DFAKE_LOG_DEVICE=1 \
-+ -Werror \
-+ -fvisibility=hidden
-+
-+OBJS= $(SRCS:.c=.o)
-+
-+BIN= liblog.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.c
-+ $(CC) -c $< $(CFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git core/libpackagelistparser/Makefile core/libpackagelistparser/Makefile
-new file mode 100644
-index 0000000..38a0158
---- /dev/null
-+++ core/libpackagelistparser/Makefile
-@@ -0,0 +1,20 @@
-+SRCS+= \
-+ packagelistparser.c
-+
-+override CFLAGS+= -I../include
-+override CFLAGS+= -I./include
-+
-+OBJS= $(SRCS:.c=.o)
-+
-+BIN= libpackagelistparser.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.c
-+ $(CC) -c $< $(CFLAGS) -o $@
-+
-+clean:
-+ rm -rf *.o
-diff --git core/libsparse/Makefile core/libsparse/Makefile
-new file mode 100644
-index 0000000..418c028
---- /dev/null
-+++ core/libsparse/Makefile
-@@ -0,0 +1,31 @@
-+SRCS+= \
-+ backed_block.c \
-+ output_file.c \
-+ sparse.c \
-+ sparse_crc32.c \
-+ sparse_err.c \
-+ sparse_read.c
-+
-+override CFLAGS+= \
-+ -I./include \
-+ -Werror
-+
-+OBJS= $(SRCS:.c=.o)
-+
-+BIN= libsparse.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.c
-+ $(CC) -c $< $(CFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git core/libutils/Makefile core/libutils/Makefile
-new file mode 100644
-index 0000000..82a22b9
---- /dev/null
-+++ core/libutils/Makefile
-@@ -0,0 +1,50 @@
-+SRCS+= \
-+ CallStack.cpp \
-+ FileMap.cpp \
-+ JenkinsHash.cpp \
-+ LinearTransform.cpp \
-+ Log.cpp \
-+ NativeHandle.cpp \
-+ Printer.cpp \
-+ PropertyMap.cpp \
-+ RefBase.cpp \
-+ SharedBuffer.cpp \
-+ Static.cpp \
-+ StopWatch.cpp \
-+ String8.cpp \
-+ String16.cpp \
-+ SystemClock.cpp \
-+ Threads.cpp \
-+ Timers.cpp \
-+ Tokenizer.cpp \
-+ Unicode.cpp \
-+ VectorImpl.cpp \
-+ misc.cpp \
-+ Looper.cpp \
-+ ProcessCallStack.cpp
-+
-+override CXXFLAGS+= \
-+ -I../include \
-+ -I../../safe-iop/include \
-+ -DLIBUTILS_NATIVE=1 \
-+ -std=gnu++14
-+
-+OBJS= $(SRCS:.cpp=.o)
-+
-+BIN= libutils.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.cpp
-+ $(CXX) -c $< $(CXXFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git core/libziparchive/Makefile core/libziparchive/Makefile
-new file mode 100644
-index 0000000..4eef274
---- /dev/null
-+++ core/libziparchive/Makefile
-@@ -0,0 +1,34 @@
-+SRCS+= \
-+ zip_archive.cc \
-+ zip_archive_stream_entry.cc \
-+ zip_writer.cc \
-+
-+override CXXFLAGS+= \
-+ -I./include \
-+ -I../include \
-+ -I../base/include \
-+ -DZLIB_CONST \
-+ -Werror \
-+ -fno-strict-aliasing \
-+ -std=gnu++14 \
-+ -Wall
-+
-+OBJS= $(SRCS:.cc=.o)
-+
-+BIN= libziparchive.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.c
-+ $(CXX) -c $< $(CXXFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git core/libziparchive/zip_writer.cc core/libziparchive/zip_writer.cc
-index 1ebed30..5c622d0 100644
---- core/libziparchive/zip_writer.cc
-+++ core/libziparchive/zip_writer.cc
-@@ -24,6 +24,7 @@
-
- #include <cassert>
- #include <cstdio>
-+#include <cstring>
- #include <memory>
- #include <vector>
- #include <zlib.h>
-diff --git extras/ext4_utils/Makefile extras/ext4_utils/Makefile
-new file mode 100644
-index 0000000..000aaca
---- /dev/null
-+++ extras/ext4_utils/Makefile
-@@ -0,0 +1,38 @@
-+SRCS+= \
-+ make_ext4fs.c \
-+ ext4fixup.c \
-+ ext4_utils.c \
-+ allocate.c \
-+ contents.c \
-+ extent.c \
-+ indirect.c \
-+ sha1.c \
-+ wipe.c \
-+ crc16.c \
-+ ext4_sb.c
-+
-+override CFLAGS+= \
-+ -I../../core/libsparse/include \
-+ -I../../core/include \
-+ -I../../libselinux/include \
-+ -fno-strict-aliasing
-+
-+OBJS= $(SRCS:.c=.o)
-+
-+BIN= libext4_utils.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.c
-+ $(CC) -c $< $(CFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git extras/f2fs_utils/Makefile extras/f2fs_utils/Makefile
-new file mode 100644
-index 0000000..d81ac9a
---- /dev/null
-+++ extras/f2fs_utils/Makefile
-@@ -0,0 +1,34 @@
-+SRCS+= \
-+ f2fs_utils.c \
-+ f2fs_ioutils.c \
-+ f2fs_dlutils.c
-+
-+
-+override CFLAGS+= \
-+ -I../../f2fs-tools/include \
-+ -I../../f2fs-tools/mkfs \
-+ -I../../core/libsparse/include \
-+ -I../../libselinux/include \
-+ -Wno-unused-parameter
-+
-+OBJS= $(SRCS:.c=.o)
-+
-+BIN= libf2fs.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.c
-+ $(CC) -c $< $(CFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-+
-+
-diff --git extras/f2fs_utils/f2fs_utils.c extras/f2fs_utils/f2fs_utils.c
-index 6254c08..05ec599 100644
---- extras/f2fs_utils/f2fs_utils.c
-+++ extras/f2fs_utils/f2fs_utils.c
-@@ -53,7 +53,7 @@ static void reset_f2fs_info() {
- config.fd = -1;
- if (f2fs_sparse_file) {
- sparse_file_destroy(f2fs_sparse_file);
-- f2fs_sparse_file = NULL;
-+ f2fs_sparse_file = 0;
- }
- }
-
-@@ -73,6 +73,6 @@ int make_f2fs_sparse_fd(int fd, long long len,
- sparse_file_write(f2fs_sparse_file, fd, /*gzip*/0, /*sparse*/1, /*crc*/0);
- sparse_file_destroy(f2fs_sparse_file);
- flush_sparse_buffs();
-- f2fs_sparse_file = NULL;
-+ f2fs_sparse_file = 0;
- return 0;
- }
-diff --git libselinux/Makefile libselinux/Makefile
-new file mode 100644
-index 0000000..52ef5cc
---- /dev/null
-+++ libselinux/Makefile
-@@ -0,0 +1,31 @@
-+SRCS+= \
-+ src/callbacks.c \
-+ src/check_context.c \
-+ src/freecon.c \
-+ src/init.c \
-+ src/label.c \
-+ src/label_file.c \
-+ src/label_android_property.c \
-+ src/label_support.c
-+
-+override CFLAGS+= -I./include
-+
-+OBJS= $(SRCS:.c=.o)
-+
-+BIN= libselinux.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.c
-+ $(CC) -c $< $(CFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-diff --git gtest/Makefile gtest/Makefile
-new file mode 100644
-index 0000000..49a50aa
---- /dev/null
-+++ gtest/Makefile
-@@ -0,0 +1,36 @@
-+SRCS+= \
-+ src/gtest-all.cc \
-+ src/gtest-filepath.cc \
-+ src/gtest-printers.cc \
-+ src/gtest-typed-test.cc \
-+ src/gtest_main.cc \
-+ src/gtest-death-test.cc \
-+ src/gtest-port.cc \
-+ src/gtest-test-part.cc \
-+ src/gtest.cc
-+
-+
-+override CXXFLAGS+= \
-+ -I./include \
-+ -I.
-+
-+OBJS= $(SRCS:.cc=.o)
-+
-+BIN= libgtest.a
-+
-+all: $(BIN)
-+
-+$(BIN): $(OBJS)
-+ $(AR) rcs $@ $(OBJS)
-+
-+%.o: %.cc
-+ $(CXX) -c $< $(CXXFLAGS) -o $@
-+
-+.PHONY: clean mrproper
-+
-+clean:
-+ rm -rf $(OBJS)
-+
-+mrproper: clean
-+ rm -rf $(BIN)
-+
diff --git a/testing/android-tools/generate_build.rb b/testing/android-tools/generate_build.rb
new file mode 100644
index 0000000000..e9319557b6
--- /dev/null
+++ b/testing/android-tools/generate_build.rb
@@ -0,0 +1,415 @@
+#!/usr/bin/ruby
+# This ruby script has been copied from Arch Linux.
+
+# Android build system is complicated and does not allow to build
+# separate parts easily.
+# This script tries to mimic Android build rules.
+
+def expand(dir, files)
+ files.map{|f| File.join(dir,f)}
+end
+
+# Compiles sources to *.o files.
+# Returns array of output *.o filenames
+def compile(sources, cflags)
+ outputs = []
+ for s in sources
+ ext = File.extname(s)
+
+ case ext
+ when '.c'
+ cc = 'cc'
+ lang_flags = '-std=gnu11 $CFLAGS $CPPFLAGS'
+ when '.cpp', '.cc'
+ cc = 'cxx'
+ lang_flags = '-std=gnu++14 $CXXFLAGS $CPPFLAGS'
+ else
+ raise "Unknown extension #{ext}"
+ end
+
+ output = s + '.o'
+ outputs << output
+ puts "build #{output}: #{cc} #{s}\n cflags = #{lang_flags} #{cflags}"
+ end
+
+ return outputs
+end
+
+# dir - directory where ninja file is located
+# lib - static library path relative to dir
+def subninja(dir, lib)
+ puts "subninja #{dir}build.ninja"
+ return lib.each{|l| dir + l}
+end
+
+# Links object files
+def link(output, objects, ldflags)
+ puts "build #{output}: link #{objects.join(' ')}\n ldflags = #{ldflags} $LDFLAGS"
+end
+
+puts "# This set of commands generated by generate_build.rb script\n\n"
+puts "CC = #{ENV['CC'] || 'clang'}"
+puts "CXX = #{ENV['CXX'] || 'clang++'}\n\n"
+puts "CFLAGS = #{ENV['CFLAGS']}"
+puts "CXXFLAGS = #{ENV['CXXFLAGS']}"
+puts "LDFLAGS = #{ENV['LDFLAGS']}"
+puts "PKGVER = #{ENV['PKGVER']}\n\n"
+
+
+puts """
+rule cc
+ command = $CC $cflags -c $in -o $out
+
+rule cxx
+ command = $CXX $cflags -c $in -o $out
+
+rule link
+ command = $CXX $ldflags $LDFLAGS $in -o $out
+
+
+"""
+
+adbdfiles = %w(
+ adb.cpp
+ adb_io.cpp
+ adb_listeners.cpp
+ adb_trace.cpp
+ adb_utils.cpp
+ bugreport.cpp
+ line_printer.cpp
+ sockets.cpp
+ transport.cpp
+ transport_local.cpp
+ transport_usb.cpp
+ transport_mdns_unsupported.cpp
+ fdevent.cpp
+ adb_auth_host.cpp
+ shell_service_protocol.cpp
+)
+libadbd = compile(expand('core/adb', adbdfiles), '-DADB_VERSION="\"$PKGVER\"" -DADB_HOST=1 -Icore/include -Icore/base/include -Icore/adb -Icore/libcrypto_utils/include -Iboringssl/include')
+
+adbfiles = %w(
+ console.cpp
+ socket_spec.cpp
+ commandline.cpp
+ adb_client.cpp
+ services.cpp
+ file_sync_client.cpp
+ sysdeps_unix.cpp
+ sysdeps/errno.cpp
+ client/main.cpp
+ client/usb_dispatch.cpp
+ client/usb_linux.cpp
+ client/usb_libusb.cpp
+ sysdeps/posix/network.cpp
+)
+libadb = compile(expand('core/adb', adbfiles), '-D_GNU_SOURCE -DADB_HOST=1 -Icore/include -Icore/base/include -Icore/adb')
+
+basefiles = %w(
+ file.cpp
+ logging.cpp
+ parsenetaddress.cpp
+ stringprintf.cpp
+ strings.cpp
+ errors_unix.cpp
+ test_utils.cpp
+)
+libbase = compile(expand('core/base', basefiles), '-DADB_HOST=1 -Icore/base/include -Icore/include')
+
+logfiles = %w(
+ log_event_write.c
+ fake_log_device.c
+ log_event_list.c
+ logger_write.c
+ config_write.c
+ config_read.c
+ logger_lock.c
+ local_logger.c
+ fake_writer.c
+ logger_name.c
+ stderr_write.c
+ logprint.c
+)
+liblog = compile(expand('core/liblog', logfiles), '-DLIBLOG_LOG_TAG=1006 -D_XOPEN_SOURCE=700 -DFAKE_LOG_DEVICE=1 -Icore/log/include -Icore/include')
+
+cutilsfiles = %w(
+ load_file.c
+ socket_local_client_unix.c
+ socket_network_client_unix.c
+ socket_local_server_unix.c
+ sockets_unix.cpp
+ socket_inaddr_any_server_unix.c
+ sockets.cpp
+ android_get_control_file.cpp
+ threads.c
+ fs_config.cpp
+ canned_fs_config.c
+)
+libcutils = compile(expand('core/libcutils', cutilsfiles), '-D_GNU_SOURCE -Icore/libcutils/include -Icore/include')
+
+diagnoseusbfiles = %w(
+ diagnose_usb.cpp
+)
+libdiagnoseusb = compile(expand('core/adb', diagnoseusbfiles), '-Icore/include -Icore/base/include')
+
+libcryptofiles = %w(
+ android_pubkey.c
+)
+libcrypto = compile(expand('core/libcrypto_utils', libcryptofiles), '-Icore/libcrypto_utils/include -Iboringssl/include')
+
+# TODO: make subninja working
+#boringssl = subninja('boringssl/build/', ['crypto/libcrypto.a'])
+boringssl = ['boringssl/build/crypto/libcrypto.a']
+
+link('adb', libbase + liblog + libcutils + libadbd + libadb + libdiagnoseusb + libcrypto + boringssl, '-lpthread -lusb-1.0')
+
+
+fastbootfiles = %w(
+ protocol.cpp
+ engine.cpp
+ bootimg_utils.cpp
+ fastboot.cpp
+ util.cpp
+ fs.cpp
+ usb_linux.cpp
+ socket.cpp
+ tcp.cpp
+ udp.cpp
+)
+libfastboot = compile(expand('core/fastboot', fastbootfiles), '-DFASTBOOT_VERSION="\"$PKGVER\"" -D_GNU_SOURCE -D_XOPEN_SOURCE=700 -DUSE_F2FS -Icore/base/include -Icore/include -Icore/adb -Icore/libsparse/include -Icore/mkbootimg -Iextras/ext4_utils/include -Iextras/f2fs_utils -Icore/libziparchive/include')
+
+sparsefiles = %w(
+ backed_block.c
+ output_file.c
+ sparse.c
+ sparse_crc32.c
+ sparse_err.c
+ sparse_read.cpp
+)
+libsparse = compile(expand('core/libsparse', sparsefiles), '-Icore/libsparse/include -Icore/base/include')
+
+f2fsfiles = %w(
+ f2fs_utils.c
+ f2fs_ioutils.c
+ f2fs_dlutils.c
+)
+f2fs = compile(expand('extras/f2fs_utils', f2fsfiles), '-Iextras/f2fs_utils -If2fs-tools/include -If2fs-tools/mkfs -Icore/libsparse/include -Iselinux/libselinux/include')
+
+zipfiles = %w(
+ zip_archive.cc
+)
+libzip = compile(expand('core/libziparchive', zipfiles), '-Icore/base/include -Icore/include -Icore/libziparchive/include')
+
+utilfiles = %w(
+ FileMap.cpp
+)
+libutil = compile(expand('core/libutils', utilfiles), '-Icore/include')
+
+ext4files = %w(
+ make_ext4fs.c
+ ext4fixup.c
+ ext4_utils.c
+ allocate.c
+ contents.c
+ extent.c
+ indirect.c
+ sha1.c
+ wipe.c
+ crc16.c
+ ext4_sb.c
+)
+libext4 = compile(expand('extras/ext4_utils', ext4files), '-D_GNU_SOURCE -Icore/libsparse/include -Icore/include -Iselinux/libselinux/include -Iextras/ext4_utils/include')
+
+selinuxfiles = %w(
+ callbacks.c
+ check_context.c
+ freecon.c
+ init.c
+ label.c
+ label_file.c
+ label_support.c
+ setrans_client.c
+ regex.c
+ matchpathcon.c
+ selinux_config.c
+ label_backends_android.c
+ canonicalize_context.c
+ lsetfilecon.c
+ policyvers.c
+ lgetfilecon.c
+ load_policy.c
+ seusers.c
+ sha1.c
+ booleans.c
+ disable.c
+ enabled.c
+ getenforce.c
+ setenforce.c
+)
+libselinux = compile(expand('selinux/libselinux/src', selinuxfiles), '-DAUDITD_LOG_TAG=1003 -D_GNU_SOURCE -DHOST -DUSE_PCRE2 -DNO_PERSISTENTLY_STORED_PATTERNS -DDISABLE_SETRANS -DDISABLE_BOOL -DNO_MEDIA_BACKEND -DNO_X_BACKEND -DNO_DB_BACKEND -DPCRE2_CODE_UNIT_WIDTH=8 -Iselinux/libselinux/include -Iselinux/libsepol/include')
+
+libsepolfiles = %w(
+ policydb_public.c
+ genbools.c
+ debug.c
+ policydb.c
+ conditional.c
+ services.c
+ ebitmap.c
+ util.c
+ assertion.c
+ avtab.c
+ hashtab.c
+ sidtab.c
+ context.c
+ genusers.c
+ context_record.c
+ mls.c
+ avrule_block.c
+ symtab.c
+ policydb_convert.c
+ write.c
+ constraint.c
+ expand.c
+ hierarchy.c
+)
+libsepol = compile(expand('selinux/libsepol/src', libsepolfiles), '-Iselinux/libsepol/include')
+
+link('fastboot', libsparse + libzip + libcutils + liblog + libutil + libbase + libext4 + f2fs + libselinux + libsepol + libfastboot + libdiagnoseusb, '-lz -lpcre2-8 -lpthread -ldl')
+
+
+# mke2fs.android - a ustom version of mke2fs that supports --android_sparse (FS#56955)
+libext2fsfiles = %w(
+ lib/blkid/cache.c
+ lib/blkid/dev.c
+ lib/blkid/devname.c
+ lib/blkid/devno.c
+ lib/blkid/getsize.c
+ lib/blkid/llseek.c
+ lib/blkid/probe.c
+ lib/blkid/read.c
+ lib/blkid/resolve.c
+ lib/blkid/save.c
+ lib/blkid/tag.c
+ lib/e2p/feature.c
+ lib/e2p/hashstr.c
+ lib/e2p/mntopts.c
+ lib/e2p/ostype.c
+ lib/e2p/parse_num.c
+ lib/e2p/uuid.c
+ lib/et/com_err.c
+ lib/et/error_message.c
+ lib/et/et_name.c
+ lib/ext2fs/alloc.c
+ lib/ext2fs/alloc_sb.c
+ lib/ext2fs/alloc_stats.c
+ lib/ext2fs/alloc_tables.c
+ lib/ext2fs/atexit.c
+ lib/ext2fs/badblocks.c
+ lib/ext2fs/bb_inode.c
+ lib/ext2fs/bitmaps.c
+ lib/ext2fs/bitops.c
+ lib/ext2fs/blkmap64_ba.c
+ lib/ext2fs/blkmap64_rb.c
+ lib/ext2fs/blknum.c
+ lib/ext2fs/block.c
+ lib/ext2fs/bmap.c
+ lib/ext2fs/closefs.c
+ lib/ext2fs/crc16.c
+ lib/ext2fs/crc32c.c
+ lib/ext2fs/csum.c
+ lib/ext2fs/dirblock.c
+ lib/ext2fs/dir_iterate.c
+ lib/ext2fs/expanddir.c
+ lib/ext2fs/ext2_err.c
+ lib/ext2fs/ext_attr.c
+ lib/ext2fs/extent.c
+ lib/ext2fs/fallocate.c
+ lib/ext2fs/fileio.c
+ lib/ext2fs/freefs.c
+ lib/ext2fs/gen_bitmap64.c
+ lib/ext2fs/gen_bitmap.c
+ lib/ext2fs/get_num_dirs.c
+ lib/ext2fs/getsectsize.c
+ lib/ext2fs/getsize.c
+ lib/ext2fs/i_block.c
+ lib/ext2fs/ind_block.c
+ lib/ext2fs/initialize.c
+ lib/ext2fs/inline.c
+ lib/ext2fs/inline_data.c
+ lib/ext2fs/inode.c
+ lib/ext2fs/io_manager.c
+ lib/ext2fs/ismounted.c
+ lib/ext2fs/link.c
+ lib/ext2fs/llseek.c
+ lib/ext2fs/lookup.c
+ lib/ext2fs/mkdir.c
+ lib/ext2fs/mkjournal.c
+ lib/ext2fs/mmp.c
+ lib/ext2fs/namei.c
+ lib/ext2fs/newdir.c
+ lib/ext2fs/openfs.c
+ lib/ext2fs/progress.c
+ lib/ext2fs/punch.c
+ lib/ext2fs/rbtree.c
+ lib/ext2fs/read_bb.c
+ lib/ext2fs/read_bb_file.c
+ lib/ext2fs/res_gdt.c
+ lib/ext2fs/rw_bitmaps.c
+ lib/ext2fs/sparse_io.c
+ lib/ext2fs/symlink.c
+ lib/ext2fs/undo_io.c
+ lib/ext2fs/unix_io.c
+ lib/ext2fs/valid_blk.c
+ lib/support/dict.c
+ lib/support/mkquota.c
+ lib/support/parse_qtype.c
+ lib/support/plausible.c
+ lib/support/prof_err.c
+ lib/support/profile.c
+ lib/support/quotaio.c
+ lib/support/quotaio_tree.c
+ lib/support/quotaio_v2.c
+ lib/uuid/gen_uuid.c
+ lib/uuid/isnull.c
+ lib/uuid/pack.c
+ lib/uuid/parse.c
+ lib/uuid/unpack.c
+ lib/uuid/unparse.c
+ misc/create_inode.c
+)
+libext2fs = compile(expand('e2fsprogs', libext2fsfiles), '-Ie2fsprogs/lib -Icore/libsparse/include')
+
+
+mke2fsfiles = %w(
+ misc/default_profile.c
+ misc/mke2fs.c
+ misc/mk_hugefiles.c
+ misc/util.c
+)
+mke2fs = compile(expand('e2fsprogs', mke2fsfiles), '-Ie2fsprogs/lib')
+
+link('mke2fs.android', mke2fs + libext2fs + libsparse + libbase + libzip + liblog + libutil, '-lpthread -lz')
+
+
+e2fsdroidfiles = %w(
+ contrib/android/e2fsdroid.c
+ contrib/android/basefs_allocator.c
+ contrib/android/block_range.c
+ contrib/android/hashmap.c
+ contrib/android/base_fs.c
+ contrib/android/fsmap.c
+ contrib/android/block_list.c
+ contrib/android/perms.c
+)
+e2fsdroid = compile(expand('e2fsprogs', e2fsdroidfiles), '-Ie2fsprogs/lib -Iselinux/libselinux/include -Icore/libcutils/include -Ie2fsprogs/misc')
+
+link('e2fsdroid', e2fsdroid + libext2fs + libsparse + libbase + libzip + liblog + libutil + libselinux + libsepol + libcutils, '-lz -lpthread -lpcre2-8')
+
+
+ext2simgfiles = %w(
+ contrib/android/ext2simg.c
+)
+ext2simg = compile(expand('e2fsprogs', ext2simgfiles), '-Ie2fsprogs/lib -Icore/libsparse/include')
+
+link('ext2simg', ext2simg + libext2fs + libsparse + libbase + libzip + liblog + libutil, '-lz -lpthread')
diff --git a/testing/android-tools/musl-fixes.patch b/testing/android-tools/musl-fixes.patch
index 4c093ce918..235ef68854 100644
--- a/testing/android-tools/musl-fixes.patch
+++ b/testing/android-tools/musl-fixes.patch
@@ -1,164 +1,199 @@
-This patch has been taken from the Void Linux distribution.
+Patch has been taken from Arch Linux with some minor modifications for
+needed to build android-tools with musl libc.
-https://github.com/voidlinux/void-packages/tree/master/srcpkgs/android-tools/patches/android-tools-musl.patch
-
-diff --git core/include/ziparchive/zip_archive.h core/include/ziparchive/zip_archive.h
-index 7dc60ae..8886a35 100644
---- core/include/ziparchive/zip_archive.h
-+++ core/include/ziparchive/zip_archive.h
-@@ -22,11 +22,12 @@
-
+diff -upr core.orig/adb/client/usb_libusb.cpp core/adb/client/usb_libusb.cpp
+--- core.orig/adb/client/usb_libusb.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/adb/client/usb_libusb.cpp 2018-02-25 10:35:06.661418453 +0100
+@@ -21,6 +21,7 @@
#include <stdint.h>
- #include <string.h>
--#include <sys/cdefs.h>
+
+ #include <atomic>
++#include <condition_variable>
+ #include <chrono>
+ #include <memory>
+ #include <mutex>
+@@ -28,7 +29,7 @@
+ #include <thread>
+ #include <unordered_map>
+
+-#include <libusb/libusb.h>
++#include <libusb-1.0/libusb.h>
+
+ #include <android-base/file.h>
+ #include <android-base/logging.h>
+diff -upr core.orig/adb/diagnose_usb.cpp core/adb/diagnose_usb.cpp
+--- core.orig/adb/diagnose_usb.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/adb/diagnose_usb.cpp 2018-02-25 10:35:06.658085109 +0100
+@@ -45,9 +45,7 @@ static std::string GetUdevProblem() {
+ return "";
+ }
+
+- // getgroups(2) indicates that the GNU group_member(3) may not check the egid so we check it
+- // additionally just to be sure.
+- if (group_member(plugdev_group->gr_gid) || getegid() == plugdev_group->gr_gid) {
++ if (getegid() == plugdev_group->gr_gid) {
+ // The user is in plugdev so the problem is likely with the udev rules.
+ return "user in plugdev group; are your udev rules wrong?";
+ }
+diff -upr core.orig/adb/sysdeps/posix/network.cpp core/adb/sysdeps/posix/network.cpp
+--- core.orig/adb/sysdeps/posix/network.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/adb/sysdeps/posix/network.cpp 2018-02-25 10:35:06.661418453 +0100
+@@ -21,6 +21,7 @@
+ #include <sys/socket.h>
+
+ #include <string>
++#include <string.h>
+
+ #include "adb_unique_fd.h"
+
+diff -upr core.orig/base/errors_unix.cpp core/base/errors_unix.cpp
+--- core.orig/base/errors_unix.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/base/errors_unix.cpp 2018-02-25 10:35:06.654751766 +0100
+@@ -17,6 +17,7 @@
+ #include "android-base/errors.h"
+
+ #include <errno.h>
++#include <string.h>
+
+ namespace android {
+ namespace base {
+diff -upr core.orig/base/file.cpp core/base/file.cpp
+--- core.orig/base/file.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/base/file.cpp 2018-02-25 10:35:06.654751766 +0100
+@@ -22,6 +22,7 @@
+ #include <sys/stat.h>
#include <sys/types.h>
- #include <utils/Compat.h>
-
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-
- /* Zip compression methods we support */
- enum {
-@@ -215,6 +216,8 @@ int GetFileDescriptor(const ZipArchiveHandle handle);
-
- const char* ErrorCodeString(int32_t error_code);
-
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
-
- #endif // LIBZIPARCHIVE_ZIPARCHIVE_H_
-diff --git core/liblog/log_portability.h core/liblog/log_portability.h
-index 3ad2060..2b859c4 100644
---- core/liblog/log_portability.h
-+++ core/liblog/log_portability.h
-@@ -17,7 +17,6 @@
- #ifndef _LIBLOG_PORTABILITY_H__
- #define _LIBLOG_PORTABILITY_H__
-
--#include <sys/cdefs.h>
#include <unistd.h>
++#include <string.h>
+
+ #include <memory>
+ #include <mutex>
+diff -upr core.orig/base/logging.cpp core/base/logging.cpp
+--- core.orig/base/logging.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/base/logging.cpp 2018-02-25 10:35:06.654751766 +0100
+@@ -23,6 +23,7 @@
+ #include <fcntl.h>
+ #include <libgen.h>
+ #include <time.h>
++#include <string.h>
+
+ // For getprogname(3) or program_invocation_short_name.
+ #if defined(__ANDROID__) || defined(__APPLE__)
+@@ -89,7 +90,7 @@ static thread_id GetThreadId() {
+ }
- /* Helpful private sys/cdefs.h like definitions */
-
-diff --git core/include/private/android_filesystem_config.h core/include/private/android_filesystem_config.h
-index c220a0c..d38f971 100644
---- core/include/private/android_filesystem_config.h
-+++ core/include/private/android_filesystem_config.h
-@@ -22,7 +22,6 @@
- #ifndef _ANDROID_FILESYSTEM_CONFIG_H_
- #define _ANDROID_FILESYSTEM_CONFIG_H_
-
--#include <sys/cdefs.h>
- #include <sys/types.h>
- #include <stdint.h>
+ namespace {
+-#if defined(__GLIBC__)
++#if defined(__linux__)
+ const char* getprogname() {
+ return program_invocation_short_name;
+ }
+diff -upr core.orig/fastboot/fs.cpp core/fastboot/fs.cpp
+--- core.orig/fastboot/fs.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/fastboot/fs.cpp 2018-02-25 10:35:06.651418422 +0100
+@@ -108,7 +108,7 @@ static int generate_ext4_image(const cha
+ static constexpr int block_size = 4096;
+ const std::string exec_dir = android::base::GetExecutableDirectory();
-@@ -230,7 +229,10 @@ struct fs_path_config {
+- const std::string mke2fs_path = exec_dir + "/mke2fs";
++ const std::string mke2fs_path = exec_dir + "/mke2fs.android";
+ std::vector<const char*> mke2fs_args = {mke2fs_path.c_str(), "-t", "ext4", "-b"};
- /* Rules for directories and files has moved to system/code/libcutils/fs_config.c */
+ std::string block_size_str = std::to_string(block_size);
+diff -upr core.orig/fastboot/socket.cpp core/fastboot/socket.cpp
+--- core.orig/fastboot/socket.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/fastboot/socket.cpp 2018-02-25 10:35:06.651418422 +0100
+@@ -28,6 +28,8 @@
--__BEGIN_DECLS
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
+ #include "socket.h"
+
++#include <sys/select.h>
+
+ #include <android-base/errors.h>
+ #include <android-base/stringprintf.h>
- /*
- * Used in:
-@@ -247,7 +249,9 @@ void fs_config(const char *path, int dir, const char *target_out_path,
+diff -upr core.orig/libsparse/sparse_read.cpp core/libsparse/sparse_read.cpp
+--- core.orig/libsparse/sparse_read.cpp 2017-11-29 19:11:44.000000000 +0100
++++ core/libsparse/sparse_read.cpp 2018-02-25 10:35:06.621418331 +0100
+@@ -26,6 +26,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string>
++#include <string.h>
+ #include <unistd.h>
- ssize_t fs_config_generate(char *buffer, size_t length, const struct fs_path_config *pc);
+ #include <sparse/sparse.h>
+diff -upr selinux.orig/libsepol/src/private.h selinux/libsepol/src/private.h
+--- selinux.orig/libsepol/src/private.h 2017-08-13 09:34:17.000000000 +0200
++++ selinux/libsepol/src/private.h 2018-02-25 10:36:31.765008355 +0100
+@@ -14,7 +14,7 @@
+ #endif
--__END_DECLS
-+#ifdef __cplusplus
-+}
-+#endif
+ #include <errno.h>
+-#include <dso.h>
++#include "dso.h"
- #endif
- #endif
-diff --git core/base/file.cpp core/base/file.cpp
-index da1adba..7ba6d23 100644
---- core/base/file.cpp
-+++ core/base/file.cpp
-@@ -111,7 +111,7 @@ bool WriteStringToFile(const std::string& content, const std::string& path,
-
- bool WriteStringToFile(const std::string& content, const std::string& path) {
- int flags = O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NOFOLLOW | O_BINARY;
-- int fd = TEMP_FAILURE_RETRY(open(path.c_str(), flags, DEFFILEMODE));
-+ int fd = TEMP_FAILURE_RETRY(open(path.c_str(), flags, (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)));
- if (fd == -1) {
- return false;
- }
-diff --git core/adb/sysdeps.h core/adb/sysdeps.h
-index 75dcc86..2dba172 100644
---- core/adb/sysdeps.h
-+++ core/adb/sysdeps.h
-@@ -757,18 +757,7 @@ static __inline__ int adb_thread_setname(const std::string& name) {
#ifdef __APPLE__
- return pthread_setname_np(name.c_str());
+ #define __BYTE_ORDER BYTE_ORDER
+diff -upr selinux.orig/libsepol/src/util.c selinux/libsepol/src/util.c
+--- selinux.orig/libsepol/src/util.c 2017-08-13 09:34:17.000000000 +0200
++++ selinux/libsepol/src/util.c 2018-02-25 10:36:31.765008355 +0100
+@@ -27,7 +27,7 @@
+ #include <sepol/policydb/flask_types.h>
+ #include <sepol/policydb/policydb.h>
+ #include <sepol/policydb/util.h>
+-#include <dso.h>
++#include "dso.h"
+
+ struct val_to_name {
+ unsigned int val;
+diff -upr e2fsprogs.orig/contrib/android/perms.c e2fsprogs/contrib/android/perms.c
+--- e2fsprogs.orig/contrib/android/perms.c 2017-11-29 00:28:33.000000000 +0100
++++ e2fsprogs/contrib/android/perms.c 2018-02-25 10:37:13.048466147 +0100
+@@ -5,6 +5,7 @@
+ #include "support/nls-enable.h"
+ #include <time.h>
+ #include <sys/stat.h>
++#include "private/android_filesystem_capability.h"
+
+ #ifndef XATTR_SELINUX_SUFFIX
+ # define XATTR_SELINUX_SUFFIX "selinux"
+diff -upr e2fsprogs.orig/lib/ext2fs/bitops.h e2fsprogs/lib/ext2fs/bitops.h
+--- e2fsprogs.orig/lib/ext2fs/bitops.h 2017-11-29 00:28:33.000000000 +0100
++++ e2fsprogs/lib/ext2fs/bitops.h 2018-02-25 10:37:13.028466087 +0100
+@@ -233,11 +233,11 @@ extern errcode_t ext2fs_find_first_set_g
+ #if (__STDC_VERSION__ >= 199901L)
+ #define _INLINE_ extern inline
#else
-- const char *s = name.c_str();
--
-- // pthread_setname_np fails rather than truncating long strings.
-- const int max_task_comm_len = 16; // including the null terminator
-- if (name.length() > (max_task_comm_len - 1)) {
-- char buf[max_task_comm_len];
-- strncpy(buf, name.c_str(), sizeof(buf) - 1);
-- buf[sizeof(buf) - 1] = '\0';
-- s = buf;
-- }
--
-- return pthread_setname_np(pthread_self(), s) ;
-+ return 0;
+-#define _INLINE_ inline
++#define _INLINE_ static inline
#endif
- }
-
-diff --git core/adb/diagnose_usb.cpp core/adb/diagnose_usb.cpp
-index 0f067b0..1138f8d 100644
---- core/adb/diagnose_usb.cpp
-+++ core/adb/diagnose_usb.cpp
-@@ -32,28 +32,7 @@ static const char kPermissionsHelpUrl[] = "http://developer.android.com/tools/de
- // Returns a message describing any potential problems we find with udev, or nullptr if we can't
- // find plugdev information (i.e. udev is not installed).
- static const char* GetUdevProblem() {
--#if defined(__linux__)
-- errno = 0;
-- group* plugdev_group = getgrnam("plugdev");
--
-- if (plugdev_group == nullptr) {
-- if (errno != 0) {
-- perror("failed to read plugdev group info");
-- }
-- // We can't give any generally useful advice here, just let the caller print the help URL.
-- return nullptr;
-- }
--
-- // getgroups(2) indicates that the group_member() may not check the egid so we check it
-- // additionally just to be sure.
-- if (group_member(plugdev_group->gr_gid) || getegid() == plugdev_group->gr_gid) {
-- // The user is in plugdev so the problem is likely with the udev rules.
-- return "verify udev rules";
-- }
-- return "udev requires plugdev group membership";
--#else
- return nullptr;
+ #else /* !INCLUDE_INLINE FUNCS */
+ #if (__STDC_VERSION__ >= 199901L)
+-#define _INLINE_ inline
++#define _INLINE_ static inline
+ #else /* not C99 */
+ #ifdef __GNUC__
+ #define _INLINE_ extern __inline__
+diff -upr e2fsprogs.orig/lib/ext2fs/ext2fs.h e2fsprogs/lib/ext2fs/ext2fs.h
+--- e2fsprogs.orig/lib/ext2fs/ext2fs.h 2017-11-29 00:28:33.000000000 +0100
++++ e2fsprogs/lib/ext2fs/ext2fs.h 2018-02-25 10:37:13.028466087 +0100
+@@ -53,9 +53,7 @@ extern "C" {
+ */
+ #define EXT2_LIB_CURRENT_REV EXT2_DYNAMIC_REV
+
+-#ifdef HAVE_SYS_TYPES_H
+ #include <sys/types.h>
-#endif
- }
- // Short help text must be a single line, and will look something like:
-diff --git core/fastboot/socket.cpp core/fastboot/socket.cpp
-index 14ecd93..aff905c 100644
---- core/fastboot/socket.cpp
-+++ core/fastboot/socket.cpp
-@@ -31,6 +31,8 @@
- #include <android-base/errors.h>
- #include <android-base/stringprintf.h>
-
-+#include <sys/select.h>
-+
- Socket::Socket(cutils_socket_t sock) : sock_(sock) {}
-
- Socket::~Socket() {
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -1736,7 +1734,7 @@ extern const struct ext2_inode *ext2fs_c
+ #define _INLINE_ extern
+ #else
+ #if (__STDC_VERSION__ >= 199901L)
+-#define _INLINE_ inline
++#define _INLINE_ static inline
+ #else
+ #ifdef __GNUC__
+ #define _INLINE_ extern __inline__