From 7918fc35280be7f0b04322c74ed9c47640858156 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Thu, 30 May 2019 21:17:58 -0700 Subject: [PATCH] Support building individual applets --- build.py | 20 +++++++++++++------- native/jni/Android.mk | 24 ++++++++++++++++++++++++ native/jni/core/applet_stub.cpp | 9 +++++++++ 3 files changed, 46 insertions(+), 7 deletions(-) create mode 100644 native/jni/core/applet_stub.cpp diff --git a/build.py b/build.py index e74b84a70..67b113572 100755 --- a/build.py +++ b/build.py @@ -56,11 +56,14 @@ archs = ['armeabi-v7a', 'x86'] arch64 = ['arm64-v8a', 'x86_64'] keystore = 'release-key.jks' config = {} +support_targets = ['magisk', 'magiskinit', 'magiskboot', 'magiskpolicy', 'busybox', 'test'] +default_targets = ['magisk', 'magiskinit', 'magiskboot', 'busybox'] def mv(source, target): try: shutil.move(source, target) + vprint(f'mv: {source} -> {target}') except: pass @@ -76,6 +79,7 @@ def cp(source, target): def rm(file): try: os.remove(file) + vprint(f'rm: {file}') except OSError as e: if e.errno != errno.ENOENT: raise @@ -102,7 +106,7 @@ def zip_with_msg(zip_file, source, target): def collect_binary(): for arch in archs + arch64: mkdir_p(os.path.join('native', 'out', arch)) - for bin in ['magisk', 'magiskinit', 'magiskinit64', 'magiskboot', 'busybox', 'test']: + for bin in support_targets + ['magiskinit64']: source = os.path.join('native', 'libs', arch, bin) target = os.path.join('native', 'out', arch, bin) mv(source, target) @@ -183,14 +187,12 @@ def run_ndk_build(flags): def build_binary(args): - support_targets = {'magisk', 'magiskinit', 'magiskboot', 'busybox', 'test'} if args.target: - args.target = set(args.target) & support_targets + args.target = set(args.target) & set(support_targets) if not args.target: return else: - # If nothing specified, build everything - args.target = ['magisk', 'magiskinit', 'magiskboot', 'busybox'] + args.target = default_targets header('* Building binaries: ' + ' '.join(args.target)) @@ -227,6 +229,9 @@ def build_binary(args): run_ndk_build('B_INIT=1') run_ndk_build('B_INIT64=1') + if 'magiskpolicy' in args.target: + run_ndk_build('B_POLICY=1') + if 'magiskboot' in args.target: run_ndk_build('B_BOOT=1') @@ -439,7 +444,8 @@ all_parser.set_defaults(func=build_all) binary_parser = subparsers.add_parser('binary', help='build binaries') binary_parser.add_argument( - 'target', nargs='*', help='Support: magisk, magiskinit, magiskboot, busybox. Leave empty to build all.') + 'target', nargs='*', help=f"Either {', '.join(support_targets)}, \ + or empty for defaults ({', '.join(default_targets)})") binary_parser.set_defaults(func=build_binary) apk_parser = subparsers.add_parser('apk', help='build Magisk Manager APK') @@ -463,7 +469,7 @@ un_parser.set_defaults(func=zip_uninstaller) clean_parser = subparsers.add_parser('clean', help='cleanup.') clean_parser.add_argument( - 'target', nargs='*', help='Support: native, java. Leave empty to clean all.') + 'target', nargs='*', help='Either native, java, or empty to clean both.') clean_parser.set_defaults(func=cleanup) if len(sys.argv) == 1: diff --git a/native/jni/Android.mk b/native/jni/Android.mk index 901b4bcf9..e33324e2b 100644 --- a/native/jni/Android.mk +++ b/native/jni/Android.mk @@ -56,6 +56,30 @@ include $(BUILD_EXECUTABLE) endif +ifdef B_POLICY + +include $(CLEAR_VARS) +LOCAL_MODULE := magiskpolicy +LOCAL_STATIC_LIBRARIES := libsepol libutils +LOCAL_C_INCLUDES := \ + jni/include \ + $(LIBSEPOL) \ + $(LIBUTILS) + +LOCAL_SRC_FILES := \ + core/applet_stub.cpp \ + magiskpolicy/api.cpp \ + magiskpolicy/magiskpolicy.cpp \ + magiskpolicy/rules.cpp \ + magiskpolicy/policydb.cpp \ + magiskpolicy/sepolicy.c + +LOCAL_CFLAGS := -DAPPLET_STUB_MAIN=magiskpolicy_main +LOCAL_LDFLAGS := -static +include $(BUILD_EXECUTABLE) + +endif + include $(CLEAR_VARS) ifdef B_INIT diff --git a/native/jni/core/applet_stub.cpp b/native/jni/core/applet_stub.cpp new file mode 100644 index 000000000..1ac5c7328 --- /dev/null +++ b/native/jni/core/applet_stub.cpp @@ -0,0 +1,9 @@ +#include + +#include + +int main(int argc, char *argv[]) { + umask(0); + cmdline_logging(); + return APPLET_STUB_MAIN(argc, argv); +}