Merge "fastboot: fix log print type mismatch"
diff --git a/adb/client/usb_libusb.cpp b/adb/client/usb_libusb.cpp
index a5e6f23..18f585d 100644
--- a/adb/client/usb_libusb.cpp
+++ b/adb/client/usb_libusb.cpp
@@ -22,6 +22,7 @@
#include <atomic>
#include <chrono>
+#include <condition_variable>
#include <memory>
#include <mutex>
#include <string>
diff --git a/adb/transport.cpp b/adb/transport.cpp
index 5cf2450..f221785 100644
--- a/adb/transport.cpp
+++ b/adb/transport.cpp
@@ -952,10 +952,18 @@
}
std::string list_transports(bool long_listing) {
- std::string result;
-
std::lock_guard<std::recursive_mutex> lock(transport_lock);
- for (const auto& t : transport_list) {
+
+ auto sorted_transport_list = transport_list;
+ sorted_transport_list.sort([](atransport*& x, atransport*& y) {
+ if (x->type != y->type) {
+ return x->type < y->type;
+ }
+ return strcmp(x->serial, y->serial) < 0;
+ });
+
+ std::string result;
+ for (const auto& t : sorted_transport_list) {
append_transport(t, &result, long_listing);
}
return result;
diff --git a/bootstat/bootstat.cpp b/bootstat/bootstat.cpp
index a1fcad8..ae0a401 100644
--- a/bootstat/bootstat.cpp
+++ b/bootstat/bootstat.cpp
@@ -272,6 +272,15 @@
{"reboot_rtc", 132},
{"cold_boot", 133},
{"hard_rst", 134},
+ {"power-on", 135},
+ {"oem_adsp_resetting_the_soc", 136},
+ {"kpdpwr", 137},
+ {"oem_modem_timeout_waiting", 138},
+ {"usb_chg", 139},
+ {"warm_reset_0x02", 140},
+ {"warm_reset_0x80", 141},
+ {"pon_reason_0xb0", 142},
+ {"reboot_download", 143},
};
// Converts a string value representing the reason the system booted to an
diff --git a/debuggerd/crasher/crasher.cpp b/debuggerd/crasher/crasher.cpp
index e9a3ebd..4b32b9d 100644
--- a/debuggerd/crasher/crasher.cpp
+++ b/debuggerd/crasher/crasher.cpp
@@ -289,7 +289,7 @@
munmap(map, sizeof(int));
map[0] = '8';
} else if (!strcasecmp(arg, "seccomp")) {
- set_seccomp_filter();
+ set_system_seccomp_filter();
syscall(99999);
#if defined(__arm__)
} else if (!strcasecmp(arg, "kuser_helper_version")) {
diff --git a/debuggerd/handler/debuggerd_handler.cpp b/debuggerd/handler/debuggerd_handler.cpp
index 96f3c7c..05e6efa 100644
--- a/debuggerd/handler/debuggerd_handler.cpp
+++ b/debuggerd/handler/debuggerd_handler.cpp
@@ -500,6 +500,17 @@
fatal_errno("failed to set dumpable");
}
+ // On kernels with yama_ptrace enabled, also allow any process to attach.
+ bool restore_orig_ptracer = true;
+ if (prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY) != 0) {
+ if (errno == EINVAL) {
+ // This kernel does not support PR_SET_PTRACER_ANY, or Yama is not enabled.
+ restore_orig_ptracer = false;
+ } else {
+ fatal_errno("failed to set traceable");
+ }
+ }
+
// Essentially pthread_create without CLONE_FILES, so we still work during file descriptor
// exhaustion.
pid_t child_pid =
@@ -521,6 +532,11 @@
fatal_errno("failed to restore dumpable");
}
+ // Restore PR_SET_PTRACER to its original value.
+ if (restore_orig_ptracer && prctl(PR_SET_PTRACER, 0) != 0) {
+ fatal_errno("failed to restore traceable");
+ }
+
if (info->si_signo == DEBUGGER_SIGNAL) {
// If the signal is fatal, don't unlock the mutex to prevent other crashing threads from
// starting to dump right before our death.
diff --git a/fs_mgr/fs_mgr.cpp b/fs_mgr/fs_mgr.cpp
index 4b94f9c..a2b80ad 100644
--- a/fs_mgr/fs_mgr.cpp
+++ b/fs_mgr/fs_mgr.cpp
@@ -38,6 +38,7 @@
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
#include <android-base/unique_fd.h>
+#include <cutils/android_filesystem_config.h>
#include <cutils/android_reboot.h>
#include <cutils/partition_utils.h>
#include <cutils/properties.h>
@@ -353,7 +354,7 @@
reserved_blocks = max_reserved_blocks;
}
- if (ext4_r_blocks_count(sb) == reserved_blocks) {
+ if ((ext4_r_blocks_count(sb) == reserved_blocks) && (sb->s_def_resgid == AID_RESERVED_DISK)) {
return;
}
@@ -363,11 +364,12 @@
return;
}
- char buf[32];
- const char* argv[] = {TUNE2FS_BIN, "-r", buf, blk_device};
-
- snprintf(buf, sizeof(buf), "%" PRIu64, reserved_blocks);
LINFO << "Setting reserved block count on " << blk_device << " to " << reserved_blocks;
+
+ auto reserved_blocks_str = std::to_string(reserved_blocks);
+ auto reserved_gid_str = std::to_string(AID_RESERVED_DISK);
+ const char* argv[] = {
+ TUNE2FS_BIN, "-r", reserved_blocks_str.c_str(), "-g", reserved_gid_str.c_str(), blk_device};
if (!run_tune2fs(argv, ARRAY_SIZE(argv))) {
LERROR << "Failed to run " TUNE2FS_BIN " to set the number of reserved blocks on "
<< blk_device;
diff --git a/fs_mgr/fs_mgr_fstab.cpp b/fs_mgr/fs_mgr_fstab.cpp
index d913af0..1c01d8c 100644
--- a/fs_mgr/fs_mgr_fstab.cpp
+++ b/fs_mgr/fs_mgr_fstab.cpp
@@ -638,6 +638,7 @@
* frees up memory of the return value without touching a and b. */
static struct fstab *in_place_merge(struct fstab *a, struct fstab *b)
{
+ if (!a && !b) return nullptr;
if (!a) return b;
if (!b) return a;
@@ -755,15 +756,17 @@
default_fstab = get_fstab_path();
}
- if (default_fstab.empty()) {
- LWARNING << __FUNCTION__ << "(): failed to find device default fstab";
+ struct fstab* fstab = nullptr;
+ if (!default_fstab.empty()) {
+ fstab = fs_mgr_read_fstab(default_fstab.c_str());
+ } else {
+ LINFO << __FUNCTION__ << "(): failed to find device default fstab";
}
+ struct fstab* fstab_dt = fs_mgr_read_fstab_dt();
+
// combines fstab entries passed in from device tree with
// the ones found from default_fstab file
- struct fstab *fstab_dt = fs_mgr_read_fstab_dt();
- struct fstab *fstab = fs_mgr_read_fstab(default_fstab.c_str());
-
return in_place_merge(fstab_dt, fstab);
}
diff --git a/libcutils/Android.bp b/libcutils/Android.bp
index 9cba109..6d00dc6 100644
--- a/libcutils/Android.bp
+++ b/libcutils/Android.bp
@@ -36,7 +36,7 @@
export_include_dirs: ["include"],
target: {
vendor: {
- export_include_dirs: ["include_vndk"],
+ override_export_include_dirs: ["include_vndk"],
},
linux_bionic: {
enabled: true,
diff --git a/libcutils/include/private/android_filesystem_config.h b/libcutils/include/private/android_filesystem_config.h
index 2ecf5bc..2f2e262 100644
--- a/libcutils/include/private/android_filesystem_config.h
+++ b/libcutils/include/private/android_filesystem_config.h
@@ -122,6 +122,7 @@
#define AID_AUTOMOTIVE_EVS 1062 /* Automotive rear and surround view system */
#define AID_LOWPAN 1063 /* LoWPAN subsystem */
#define AID_HSM 1064 /* hardware security module subsystem */
+#define AID_RESERVED_DISK 1065 /* GID that has access to reserved disk space */
/* Changes to this file must be made in AOSP, *not* in internal branches. */
#define AID_SHELL 2000 /* adb and debug shell user */
diff --git a/libcutils/uevent.cpp b/libcutils/uevent.cpp
index a84e5b0..2dfceed 100644
--- a/libcutils/uevent.cpp
+++ b/libcutils/uevent.cpp
@@ -27,54 +27,6 @@
#include <linux/netlink.h>
-#include <fstream>
-
-#include <private/android_filesystem_config.h>
-
-namespace {
-
-// Returns the uid of root in the current user namespace.
-// Returns AID_OVERFLOWUID if the root user is not mapped in the current
-// namespace.
-// Returns 0 if the kernel is not user namespace-aware (for backwards
-// compatibility) or if AID_OVERFLOWUID could not be validated to match what the
-// kernel would return.
-uid_t GetRootUid() {
- constexpr uid_t kParentRootUid = 0;
-
- std::ifstream uid_map_file("/proc/self/uid_map");
- if (!uid_map_file) {
- // The kernel does not support user namespaces.
- return kParentRootUid;
- }
-
- uid_t current_namespace_uid, parent_namespace_uid;
- uint32_t length;
- while (uid_map_file >> current_namespace_uid >> parent_namespace_uid >> length) {
- // Since kParentRootUid is 0, it should be the first entry in the mapped
- // range.
- if (parent_namespace_uid != kParentRootUid || length < 1) continue;
- return current_namespace_uid;
- }
-
- // Sanity check: verify that the overflow UID is the one to be returned by
- // the kernel.
- std::ifstream overflowuid_file("/proc/sys/kernel/overflowuid");
- if (!overflowuid_file) {
- // It's better to return 0 in case we cannot make sure that the overflow
- // UID matches.
- return kParentRootUid;
- }
- uid_t kernel_overflow_uid;
- if (!(overflowuid_file >> kernel_overflow_uid) || kernel_overflow_uid != AID_OVERFLOWUID)
- return kParentRootUid;
-
- // root is unmapped, use the kernel "overflow" uid.
- return AID_OVERFLOWUID;
-}
-
-} // namespace
-
extern "C" {
/**
@@ -99,7 +51,6 @@
}
ssize_t uevent_kernel_recv(int socket, void* buffer, size_t length, bool require_group, uid_t* uid) {
- static const uid_t root_uid = GetRootUid();
struct iovec iov = {buffer, length};
struct sockaddr_nl addr;
char control[CMSG_SPACE(sizeof(struct ucred))];
@@ -122,10 +73,6 @@
cred = (struct ucred*)CMSG_DATA(cmsg);
*uid = cred->uid;
- if (cred->uid != root_uid) {
- /* ignoring netlink message from non-root user */
- goto out;
- }
if (addr.nl_pid != 0) {
/* ignore non-kernel */
diff --git a/liblog/Android.bp b/liblog/Android.bp
index d5bb29e..7d9e306 100644
--- a/liblog/Android.bp
+++ b/liblog/Android.bp
@@ -55,7 +55,7 @@
enabled: true,
},
vendor: {
- export_include_dirs: ["include_vndk"],
+ override_export_include_dirs: ["include_vndk"],
},
},
}
diff --git a/libsuspend/Android.bp b/libsuspend/Android.bp
index fa06dc4..b3e36c2 100644
--- a/libsuspend/Android.bp
+++ b/libsuspend/Android.bp
@@ -14,6 +14,7 @@
export_include_dirs: ["include"],
local_include_dirs: ["include"],
shared_libs: [
+ "libbase",
"liblog",
"libcutils",
],
diff --git a/libsuspend/autosuspend_wakeup_count.cpp b/libsuspend/autosuspend_wakeup_count.cpp
index 30f8427..cfca765 100644
--- a/libsuspend/autosuspend_wakeup_count.cpp
+++ b/libsuspend/autosuspend_wakeup_count.cpp
@@ -17,7 +17,6 @@
#define LOG_TAG "libsuspend"
//#define LOG_NDEBUG 0
-#include <errno.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
@@ -29,22 +28,29 @@
#include <sys/types.h>
#include <unistd.h>
-#include <log/log.h>
+#include <android-base/file.h>
+#include <android-base/logging.h>
+#include <android-base/strings.h>
#include "autosuspend_ops.h"
-#define SYS_POWER_STATE "/sys/power/state"
-#define SYS_POWER_WAKEUP_COUNT "/sys/power/wakeup_count"
-
#define BASE_SLEEP_TIME 100000
+#define MAX_SLEEP_TIME 60000000
static int state_fd;
static int wakeup_count_fd;
+
+using android::base::ReadFdToString;
+using android::base::Trim;
+using android::base::WriteStringToFd;
+
static pthread_t suspend_thread;
static sem_t suspend_lockout;
static const char* sleep_state = "mem";
static void (*wakeup_func)(bool success) = NULL;
static int sleep_time = BASE_SLEEP_TIME;
+static constexpr char sys_power_state[] = "/sys/power/state";
+static constexpr char sys_power_wakeup_count[] = "/sys/power/wakeup_count";
static void update_sleep_time(bool success) {
if (success) {
@@ -52,13 +58,10 @@
return;
}
// double sleep time after each failure up to one minute
- sleep_time = MIN(sleep_time * 2, 60000000);
+ sleep_time = MIN(sleep_time * 2, MAX_SLEEP_TIME);
}
static void* suspend_thread_func(void* arg __attribute__((unused))) {
- char buf[80];
- char wakeup_count[20];
- int wakeup_count_len;
int ret;
bool success = true;
@@ -66,95 +69,84 @@
update_sleep_time(success);
usleep(sleep_time);
success = false;
- ALOGV("%s: read wakeup_count", __func__);
+ LOG(VERBOSE) << "read wakeup_count";
lseek(wakeup_count_fd, 0, SEEK_SET);
- wakeup_count_len =
- TEMP_FAILURE_RETRY(read(wakeup_count_fd, wakeup_count, sizeof(wakeup_count)));
- if (wakeup_count_len < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error reading from %s: %s", SYS_POWER_WAKEUP_COUNT, buf);
- wakeup_count_len = 0;
- continue;
- }
- if (!wakeup_count_len) {
- ALOGE("Empty wakeup count");
+ std::string wakeup_count;
+ if (!ReadFdToString(wakeup_count_fd, &wakeup_count)) {
+ PLOG(ERROR) << "error reading from " << sys_power_wakeup_count;
continue;
}
- ALOGV("%s: wait", __func__);
+ wakeup_count = Trim(wakeup_count);
+ if (wakeup_count.empty()) {
+ LOG(ERROR) << "empty wakeup count";
+ continue;
+ }
+
+ LOG(VERBOSE) << "wait";
ret = sem_wait(&suspend_lockout);
if (ret < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error waiting on semaphore: %s", buf);
+ PLOG(ERROR) << "error waiting on semaphore";
continue;
}
- ALOGV("%s: write %*s to wakeup_count", __func__, wakeup_count_len, wakeup_count);
- ret = TEMP_FAILURE_RETRY(write(wakeup_count_fd, wakeup_count, wakeup_count_len));
- if (ret < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error writing to %s: %s", SYS_POWER_WAKEUP_COUNT, buf);
- } else {
- ALOGV("%s: write %s to %s", __func__, sleep_state, SYS_POWER_STATE);
- ret = TEMP_FAILURE_RETRY(write(state_fd, sleep_state, strlen(sleep_state)));
- if (ret >= 0) {
- success = true;
- }
+ LOG(VERBOSE) << "write " << wakeup_count << " to wakeup_count";
+ if (WriteStringToFd(wakeup_count, wakeup_count_fd)) {
+ LOG(VERBOSE) << "write " << sleep_state << " to " << sys_power_state;
+ success = WriteStringToFd(sleep_state, state_fd);
+
void (*func)(bool success) = wakeup_func;
if (func != NULL) {
(*func)(success);
}
+ } else {
+ PLOG(ERROR) << "error writing to " << sys_power_wakeup_count;
}
- ALOGV("%s: release sem", __func__);
+ LOG(VERBOSE) << "release sem";
ret = sem_post(&suspend_lockout);
if (ret < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error releasing semaphore: %s", buf);
+ PLOG(ERROR) << "error releasing semaphore";
}
}
return NULL;
}
static int autosuspend_wakeup_count_enable(void) {
- char buf[80];
int ret;
- ALOGV("autosuspend_wakeup_count_enable");
+ LOG(VERBOSE) << "autosuspend_wakeup_count_enable";
ret = sem_post(&suspend_lockout);
if (ret < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error changing semaphore: %s", buf);
+ PLOG(ERROR) << "error changing semaphore";
}
- ALOGV("autosuspend_wakeup_count_enable done");
+ LOG(VERBOSE) << "autosuspend_wakeup_count_enable done";
return ret;
}
static int autosuspend_wakeup_count_disable(void) {
- char buf[80];
int ret;
- ALOGV("autosuspend_wakeup_count_disable");
+ LOG(VERBOSE) << "autosuspend_wakeup_count_disable";
ret = sem_wait(&suspend_lockout);
if (ret < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error changing semaphore: %s", buf);
+ PLOG(ERROR) << "error changing semaphore";
}
- ALOGV("autosuspend_wakeup_count_disable done");
+ LOG(VERBOSE) << "autosuspend_wakeup_count_disable done";
return ret;
}
static void autosuspend_set_wakeup_callback(void (*func)(bool success)) {
if (wakeup_func != NULL) {
- ALOGE("Duplicate wakeup callback applied, keeping original");
+ LOG(ERROR) << "duplicate wakeup callback applied, keeping original";
return;
}
wakeup_func = func;
@@ -168,36 +160,31 @@
struct autosuspend_ops* autosuspend_wakeup_count_init(void) {
int ret;
- char buf[80];
- state_fd = TEMP_FAILURE_RETRY(open(SYS_POWER_STATE, O_RDWR));
+ state_fd = TEMP_FAILURE_RETRY(open(sys_power_state, O_RDWR));
if (state_fd < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error opening %s: %s", SYS_POWER_STATE, buf);
+ PLOG(ERROR) << "error opening " << sys_power_state;
goto err_open_state;
}
- wakeup_count_fd = TEMP_FAILURE_RETRY(open(SYS_POWER_WAKEUP_COUNT, O_RDWR));
+ wakeup_count_fd = TEMP_FAILURE_RETRY(open(sys_power_wakeup_count, O_RDWR));
if (wakeup_count_fd < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error opening %s: %s", SYS_POWER_WAKEUP_COUNT, buf);
+ PLOG(ERROR) << "error opening " << sys_power_wakeup_count;
goto err_open_wakeup_count;
}
ret = sem_init(&suspend_lockout, 0, 0);
if (ret < 0) {
- strerror_r(errno, buf, sizeof(buf));
- ALOGE("Error creating semaphore: %s", buf);
+ PLOG(ERROR) << "error creating semaphore";
goto err_sem_init;
}
ret = pthread_create(&suspend_thread, NULL, suspend_thread_func, NULL);
if (ret) {
- strerror_r(ret, buf, sizeof(buf));
- ALOGE("Error creating thread: %s", buf);
+ LOG(ERROR) << "error creating thread: " << strerror(ret);
goto err_pthread_create;
}
- ALOGI("Selected wakeup count");
+ LOG(INFO) << "selected wakeup count";
return &autosuspend_wakeup_count_ops;
err_pthread_create:
diff --git a/property_service/property_info_checker/Android.bp b/property_service/property_info_checker/Android.bp
index 78659d4..6e9e7f1 100644
--- a/property_service/property_info_checker/Android.bp
+++ b/property_service/property_info_checker/Android.bp
@@ -1,6 +1,7 @@
cc_binary {
name: "property_info_checker",
host_supported: true,
+ static_executable: true,
cpp_std: "experimental",
target: {
linux: {
diff --git a/rootdir/etc/ld.config.txt.in b/rootdir/etc/ld.config.txt.in
index 70363569..ffc4359 100644
--- a/rootdir/etc/ld.config.txt.in
+++ b/rootdir/etc/ld.config.txt.in
@@ -277,12 +277,6 @@
namespace.vndk.search.paths = /system/${LIB}/vndk-sp${VNDK_VER}
namespace.vndk.search.paths += /system/${LIB}/vndk${VNDK_VER}
-# This is exceptionally required since android.hidl.memory@1.0-impl.so is here
-namespace.vndk.permitted.paths = /system/${LIB}/vndk-sp${VNDK_VER}/hw
-
-namespace.vndk.asan.permitted.paths += /data/asan/system/${LIB}/vndk-sp${VNDK_VER}/hw
-namespace.vndk.asan.permitted.paths += /system/${LIB}/vndk-sp${VNDK_VER}/hw
-
namespace.vndk.asan.search.paths = /data/asan/system/${LIB}/vndk-sp${VNDK_VER}
namespace.vndk.asan.search.paths += /system/${LIB}/vndk-sp${VNDK_VER}
namespace.vndk.asan.search.paths += /data/asan/system/${LIB}/vndk${VNDK_VER}
diff --git a/rootdir/init.zygote32.rc b/rootdir/init.zygote32.rc
index d836c4e..ac87979 100644
--- a/rootdir/init.zygote32.rc
+++ b/rootdir/init.zygote32.rc
@@ -2,7 +2,7 @@
class main
priority -20
user root
- group root readproc
+ group root readproc reserved_disk
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
diff --git a/rootdir/init.zygote32_64.rc b/rootdir/init.zygote32_64.rc
index 80bb673..a535846 100644
--- a/rootdir/init.zygote32_64.rc
+++ b/rootdir/init.zygote32_64.rc
@@ -2,7 +2,7 @@
class main
priority -20
user root
- group root readproc
+ group root readproc reserved_disk
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
@@ -17,7 +17,7 @@
class main
priority -20
user root
- group root readproc
+ group root readproc reserved_disk
socket zygote_secondary stream 660 root system
onrestart restart zygote
writepid /dev/cpuset/foreground/tasks
diff --git a/rootdir/init.zygote64.rc b/rootdir/init.zygote64.rc
index 05ec16f..6fc810b 100644
--- a/rootdir/init.zygote64.rc
+++ b/rootdir/init.zygote64.rc
@@ -2,7 +2,7 @@
class main
priority -20
user root
- group root readproc
+ group root readproc reserved_disk
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
diff --git a/rootdir/init.zygote64_32.rc b/rootdir/init.zygote64_32.rc
index 09db7b0..7ddd52e 100644
--- a/rootdir/init.zygote64_32.rc
+++ b/rootdir/init.zygote64_32.rc
@@ -2,7 +2,7 @@
class main
priority -20
user root
- group root readproc
+ group root readproc reserved_disk
socket zygote stream 660 root system
onrestart write /sys/android_power/request_state wake
onrestart write /sys/power/state on
@@ -17,7 +17,7 @@
class main
priority -20
user root
- group root readproc
+ group root readproc reserved_disk
socket zygote_secondary stream 660 root system
onrestart restart zygote
writepid /dev/cpuset/foreground/tasks
diff --git a/toolbox/Android.bp b/toolbox/Android.bp
index 9c2cafa..b5d16b8 100644
--- a/toolbox/Android.bp
+++ b/toolbox/Android.bp
@@ -1,11 +1,18 @@
-common_cflags = [
- "-Werror",
- "-Wno-unused-parameter",
- "-Wno-unused-const-variable",
- "-include bsd-compatibility.h"
-]
+cc_defaults {
+ name: "toolbox_defaults",
+
+ cflags: [
+ "-Werror",
+ "-Wno-unused-parameter",
+ "-Wno-unused-const-variable",
+ "-include bsd-compatibility.h",
+ ],
+ local_include_dirs: ["upstream-netbsd/include/"],
+}
cc_library_static {
+ name: "libtoolbox_dd",
+ defaults: ["toolbox_defaults"],
srcs: [
"upstream-netbsd/bin/dd/args.c",
"upstream-netbsd/bin/dd/conv.c",
@@ -19,17 +26,61 @@
"upstream-netbsd/lib/libc/string/swab.c",
"upstream-netbsd/lib/libutil/raise_default_signal.c",
],
- cflags: common_cflags + [
+ cflags: [
"-Dmain=dd_main",
"-DNO_CONV",
],
- local_include_dirs: ["upstream-netbsd/include/"],
- name: "libtoolbox_dd",
+}
+
+genrule {
+ name: "toolbox_tools",
+ cmd: "echo '/* file generated automatically */' >$(out) && for t in toolbox dd getevent newfs_msdos; do echo \"TOOL($$t)\" >>$(out); done",
+ out: ["tools.h"],
+}
+
+genrule {
+ name: "toolbox_input_labels",
+ tool_files: ["generate-input.h-labels.py"],
+ cmd: "$(location) $(in) >$(out)",
+ srcs: [":kernel_input_headers"],
+ out: ["input.h-labels.h"],
+}
+
+cc_binary {
+ name: "toolbox",
+ defaults: ["toolbox_defaults"],
+ srcs: [
+ "toolbox.c",
+ "getevent.c",
+ "newfs_msdos.c",
+ ],
+ generated_headers: [
+ "toolbox_tools",
+ "toolbox_input_labels",
+ ],
+ whole_static_libs: ["libtoolbox_dd"],
+ shared_libs: [
+ "libcutils",
+ ],
+
+ symlinks: [
+ "dd",
+ "getevent",
+ "newfs_msdos",
+ ],
+}
+
+// We only want 'r' on userdebug and eng builds.
+cc_binary {
+ name: "r",
+ defaults: ["toolbox_defaults"],
+ srcs: ["r.c"],
}
// We build BSD grep separately, so it can provide egrep and fgrep too.
cc_defaults {
name: "grep_common",
+ defaults: ["toolbox_defaults"],
srcs: [
"upstream-netbsd/usr.bin/grep/fastgrep.c",
"upstream-netbsd/usr.bin/grep/file.c",
@@ -37,9 +88,10 @@
"upstream-netbsd/usr.bin/grep/queue.c",
"upstream-netbsd/usr.bin/grep/util.c",
],
- cflags: common_cflags,
- local_include_dirs: ["upstream-netbsd/include/"],
- symlinks: ["egrep", "fgrep"],
+ symlinks: [
+ "egrep",
+ "fgrep",
+ ],
sanitize: {
integer_overflow: false,
diff --git a/toolbox/Android.mk b/toolbox/Android.mk
deleted file mode 100644
index c4795a7..0000000
--- a/toolbox/Android.mk
+++ /dev/null
@@ -1,70 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-
-common_cflags := \
- -Werror -Wno-unused-parameter -Wno-unused-const-variable \
- -include bsd-compatibility.h \
-
-include $(CLEAR_VARS)
-
-BSD_TOOLS := \
- dd \
-
-OUR_TOOLS := \
- getevent \
- newfs_msdos \
-
-ALL_TOOLS = $(BSD_TOOLS) $(OUR_TOOLS)
-
-LOCAL_SRC_FILES := \
- toolbox.c \
- $(patsubst %,%.c,$(OUR_TOOLS)) \
-
-LOCAL_CFLAGS += $(common_cflags)
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/upstream-netbsd/include/
-
-LOCAL_SHARED_LIBRARIES := \
- libcutils \
-
-LOCAL_WHOLE_STATIC_LIBRARIES := $(patsubst %,libtoolbox_%,$(BSD_TOOLS))
-
-LOCAL_MODULE := toolbox
-
-# Install the symlinks.
-LOCAL_POST_INSTALL_CMD := $(hide) $(foreach t,$(ALL_TOOLS),ln -sf toolbox $(TARGET_OUT)/bin/$(t);)
-
-# Including this will define $(intermediates).
-#
-include $(BUILD_EXECUTABLE)
-
-$(LOCAL_PATH)/toolbox.c: $(intermediates)/tools.h
-
-TOOLS_H := $(intermediates)/tools.h
-$(TOOLS_H): PRIVATE_TOOLS := toolbox $(ALL_TOOLS)
-$(TOOLS_H): PRIVATE_CUSTOM_TOOL = echo "/* file generated automatically */" > $@ ; for t in $(PRIVATE_TOOLS) ; do echo "TOOL($$t)" >> $@ ; done
-$(TOOLS_H): $(LOCAL_PATH)/Android.mk
-$(TOOLS_H):
- $(transform-generated-source)
-
-$(LOCAL_PATH)/getevent.c: $(intermediates)/input.h-labels.h
-
-UAPI_INPUT_EVENT_CODES_H := bionic/libc/kernel/uapi/linux/input.h bionic/libc/kernel/uapi/linux/input-event-codes.h
-INPUT_H_LABELS_H := $(intermediates)/input.h-labels.h
-$(INPUT_H_LABELS_H): PRIVATE_LOCAL_PATH := $(LOCAL_PATH)
-# The PRIVATE_CUSTOM_TOOL line uses = to evaluate the output path late.
-# We copy the input path so it can't be accidentally modified later.
-$(INPUT_H_LABELS_H): PRIVATE_UAPI_INPUT_EVENT_CODES_H := $(UAPI_INPUT_EVENT_CODES_H)
-$(INPUT_H_LABELS_H): PRIVATE_CUSTOM_TOOL = $(PRIVATE_LOCAL_PATH)/generate-input.h-labels.py $(PRIVATE_UAPI_INPUT_EVENT_CODES_H) > $@
-# The dependency line though gets evaluated now, so the PRIVATE_ copy doesn't exist yet,
-# and the original can't yet have been modified, so this is both sufficient and necessary.
-$(INPUT_H_LABELS_H): $(LOCAL_PATH)/Android.mk $(LOCAL_PATH)/generate-input.h-labels.py $(UAPI_INPUT_EVENT_CODES_H)
-$(INPUT_H_LABELS_H):
- $(transform-generated-source)
-
-# We only want 'r' on userdebug and eng builds.
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := r.c
-LOCAL_CFLAGS += $(common_cflags)
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/upstream-netbsd/include/
-LOCAL_MODULE := r
-LOCAL_MODULE_TAGS := debug
-include $(BUILD_EXECUTABLE)