mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-11-23 03:59:41 +00:00
Prebuild Busybox
Prebuild with tools in ndk-box-kitchen
This commit is contained in:
parent
7c0b25cad9
commit
ef81cdab4f
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -1,9 +1,6 @@
|
||||
[submodule "selinux"]
|
||||
path = native/src/external/selinux
|
||||
url = https://github.com/topjohnwu/selinux.git
|
||||
[submodule "busybox"]
|
||||
path = native/src/external/busybox
|
||||
url = https://github.com/topjohnwu/ndk-busybox.git
|
||||
[submodule "lz4"]
|
||||
path = native/src/external/lz4
|
||||
url = https://github.com/lz4/lz4.git
|
||||
@ -13,9 +10,6 @@
|
||||
[submodule "xz"]
|
||||
path = native/src/external/xz
|
||||
url = https://github.com/xz-mirror/xz.git
|
||||
[submodule "pcre"]
|
||||
path = native/src/external/pcre
|
||||
url = https://android.googlesource.com/platform/external/pcre
|
||||
[submodule "libcxx"]
|
||||
path = native/src/external/libcxx
|
||||
url = https://github.com/topjohnwu/libcxx.git
|
||||
|
6
build.py
6
build.py
@ -76,7 +76,7 @@ triples = [
|
||||
"x86_64-linux-android",
|
||||
"riscv64-linux-android",
|
||||
]
|
||||
default_targets = ["magisk", "magiskinit", "magiskboot", "magiskpolicy", "busybox"]
|
||||
default_targets = ["magisk", "magiskinit", "magiskboot", "magiskpolicy"]
|
||||
support_targets = default_targets + ["resetprop"]
|
||||
rust_targets = ["magisk", "magiskinit", "magiskboot", "magiskpolicy"]
|
||||
|
||||
@ -246,7 +246,7 @@ def run_ndk_build(args, flags):
|
||||
mv(source, target)
|
||||
|
||||
|
||||
def run_cargo(cmds, triple="aarch64-linux-android"):
|
||||
def run_cargo(cmds):
|
||||
env = os.environ.copy()
|
||||
env["PATH"] = f'{rust_bin}{os.pathsep}{env["PATH"]}'
|
||||
env["CARGO_BUILD_RUSTC"] = str(rust_bin / f"rustc{EXE_EXT}")
|
||||
@ -287,7 +287,7 @@ def run_cargo_build(args):
|
||||
|
||||
for target in targets:
|
||||
cmds[2] = target
|
||||
proc = run_cargo(cmds, triple)
|
||||
proc = run_cargo(cmds)
|
||||
if proc.returncode != 0:
|
||||
error("Build binary failed!")
|
||||
|
||||
|
@ -17,6 +17,7 @@ import org.gradle.api.JavaVersion
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.tasks.Copy
|
||||
import org.gradle.api.tasks.Delete
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.InputFiles
|
||||
@ -39,8 +40,11 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.File
|
||||
import java.net.URI
|
||||
import java.security.KeyStore
|
||||
import java.security.MessageDigest
|
||||
import java.security.cert.X509Certificate
|
||||
import java.util.HexFormat
|
||||
import java.util.jar.JarFile
|
||||
import java.util.zip.Deflater
|
||||
import java.util.zip.DeflaterOutputStream
|
||||
@ -109,6 +113,11 @@ fun Project.setupCommon() {
|
||||
}
|
||||
}
|
||||
|
||||
const val BUSYBOX_DOWNLOAD_URL =
|
||||
"https://github.com/topjohnwu/magisk-files/releases/download/files/busybox-1.36.1.0.zip"
|
||||
const val BUSYBOX_ZIP_CHECKSUM =
|
||||
"ea4f3019b0087dcb68130b32ab59dc2db0ee0af11d8396124a94c4231c5ea441"
|
||||
|
||||
fun Project.setupCoreLib() {
|
||||
setupCommon()
|
||||
|
||||
@ -117,18 +126,41 @@ fun Project.setupCoreLib() {
|
||||
for (abi in arrayOf("armeabi-v7a", "x86", "arm64-v8a", "x86_64", "riscv64")) {
|
||||
into(abi) {
|
||||
from(rootProject.file("native/out/$abi")) {
|
||||
include("busybox", "magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
||||
include("magiskboot", "magiskinit", "magiskpolicy", "magisk")
|
||||
rename { "lib$it.so" }
|
||||
}
|
||||
}
|
||||
}
|
||||
onlyIf {
|
||||
if (inputs.sourceFiles.files.size != 25)
|
||||
if (inputs.sourceFiles.files.size != 20)
|
||||
throw StopExecutionException("Please build binaries first! (./build.py binary)")
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
val downloadBusybox by tasks.registering(Copy::class) {
|
||||
dependsOn(syncLibs)
|
||||
val bb = layout.buildDirectory.file(BUSYBOX_ZIP_CHECKSUM).get().asFile
|
||||
if (bb.exists()) {
|
||||
val md = MessageDigest.getInstance("SHA-256")
|
||||
bb.inputStream().use { md.update(it.readAllBytes()) }
|
||||
val hash = HexFormat.of().formatHex(md.digest())
|
||||
if (hash != BUSYBOX_ZIP_CHECKSUM) {
|
||||
bb.delete()
|
||||
}
|
||||
}
|
||||
if (!bb.exists()) {
|
||||
bb.parentFile.mkdirs()
|
||||
URI(BUSYBOX_DOWNLOAD_URL).toURL().openStream().use { dl ->
|
||||
bb.outputStream().use {
|
||||
dl.copyTo(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
from(zipTree(bb))
|
||||
into("src/main/jniLibs")
|
||||
}
|
||||
|
||||
val syncResources by tasks.registering(Sync::class) {
|
||||
into("src/main/resources/META-INF/com/google/android")
|
||||
from(rootProject.file("scripts/update_binary.sh")) {
|
||||
@ -142,7 +174,7 @@ fun Project.setupCoreLib() {
|
||||
androidLib.libraryVariants.all {
|
||||
val variantCapped = name.replaceFirstChar { it.uppercase() }
|
||||
|
||||
tasks.getByPath("merge${variantCapped}JniLibFolders").dependsOn(syncLibs)
|
||||
tasks.getByPath("merge${variantCapped}JniLibFolders").dependsOn(downloadBusybox)
|
||||
processJavaResourcesProvider.configure { dependsOn(syncResources) }
|
||||
|
||||
val stubTask = tasks.getByPath(":app:stub:comment$variantCapped")
|
||||
|
@ -172,9 +172,3 @@ include $(BUILD_STATIC_LIBRARY)
|
||||
include src/Android-rs.mk
|
||||
include src/base/Android.mk
|
||||
include src/external/Android.mk
|
||||
|
||||
ifdef B_BB
|
||||
|
||||
include src/external/busybox/Android.mk
|
||||
|
||||
endif
|
||||
|
@ -17,11 +17,3 @@ APP_CFLAGS += -fno-unwind-tables -fno-asynchronous-unwind-tables -fno-stac
|
||||
NDK_APP_OUT := ./obj/nolibc
|
||||
|
||||
endif
|
||||
|
||||
# Busybox should use a newer libc.a
|
||||
ifdef B_BB
|
||||
APP_PLATFORM := android-26
|
||||
ifeq ($(OS),Windows_NT)
|
||||
APP_SHORT_COMMANDS := true
|
||||
endif
|
||||
endif
|
||||
|
110
native/src/external/Android.mk
vendored
110
native/src/external/Android.mk
vendored
@ -220,116 +220,6 @@ LOCAL_CFLAGS += -DHAVE_REALLOCARRAY
|
||||
endif
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
# libselinux.a
|
||||
include $(CLEAR_VARS)
|
||||
LIBSELINUX := $(SE_PATH)/libselinux/include
|
||||
LOCAL_MODULE:= libselinux
|
||||
LOCAL_C_INCLUDES := $(LIBSELINUX)
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LIBSELINUX)
|
||||
LOCAL_STATIC_LIBRARIES := libpcre2
|
||||
LOCAL_CFLAGS := \
|
||||
-Wno-implicit-function-declaration -Wno-int-conversion -Wno-unused-function \
|
||||
-Wno-macro-redefined -Wno-unused-but-set-variable -D_GNU_SOURCE -DUSE_PCRE2 \
|
||||
-DNO_PERSISTENTLY_STORED_PATTERNS -DDISABLE_SETRANS -DDISABLE_BOOL \
|
||||
-DNO_MEDIA_BACKEND -DNO_X_BACKEND -DNO_DB_BACKEND -DNO_ANDROID_BACKEND \
|
||||
-Dfgets_unlocked=fgets -D'__fsetlocking(...)='
|
||||
LOCAL_SRC_FILES := \
|
||||
selinux/libselinux/src/avc.c \
|
||||
selinux/libselinux/src/avc_internal.c \
|
||||
selinux/libselinux/src/avc_sidtab.c \
|
||||
selinux/libselinux/src/booleans.c \
|
||||
selinux/libselinux/src/callbacks.c \
|
||||
selinux/libselinux/src/canonicalize_context.c \
|
||||
selinux/libselinux/src/checkAccess.c \
|
||||
selinux/libselinux/src/check_context.c \
|
||||
selinux/libselinux/src/checkreqprot.c \
|
||||
selinux/libselinux/src/compute_av.c \
|
||||
selinux/libselinux/src/compute_create.c \
|
||||
selinux/libselinux/src/compute_member.c \
|
||||
selinux/libselinux/src/compute_relabel.c \
|
||||
selinux/libselinux/src/compute_user.c \
|
||||
selinux/libselinux/src/context.c \
|
||||
selinux/libselinux/src/deny_unknown.c \
|
||||
selinux/libselinux/src/disable.c \
|
||||
selinux/libselinux/src/enabled.c \
|
||||
selinux/libselinux/src/fgetfilecon.c \
|
||||
selinux/libselinux/src/freecon.c \
|
||||
selinux/libselinux/src/freeconary.c \
|
||||
selinux/libselinux/src/fsetfilecon.c \
|
||||
selinux/libselinux/src/get_context_list.c \
|
||||
selinux/libselinux/src/get_default_type.c \
|
||||
selinux/libselinux/src/get_initial_context.c \
|
||||
selinux/libselinux/src/getenforce.c \
|
||||
selinux/libselinux/src/getfilecon.c \
|
||||
selinux/libselinux/src/getpeercon.c \
|
||||
selinux/libselinux/src/init.c \
|
||||
selinux/libselinux/src/is_customizable_type.c \
|
||||
selinux/libselinux/src/label.c \
|
||||
selinux/libselinux/src/label_file.c \
|
||||
selinux/libselinux/src/label_support.c \
|
||||
selinux/libselinux/src/lgetfilecon.c \
|
||||
selinux/libselinux/src/load_policy.c \
|
||||
selinux/libselinux/src/lsetfilecon.c \
|
||||
selinux/libselinux/src/mapping.c \
|
||||
selinux/libselinux/src/matchmediacon.c \
|
||||
selinux/libselinux/src/matchpathcon.c \
|
||||
selinux/libselinux/src/policyvers.c \
|
||||
selinux/libselinux/src/procattr.c \
|
||||
selinux/libselinux/src/query_user_context.c \
|
||||
selinux/libselinux/src/regex.c \
|
||||
selinux/libselinux/src/reject_unknown.c \
|
||||
selinux/libselinux/src/selinux_check_securetty_context.c \
|
||||
selinux/libselinux/src/selinux_config.c \
|
||||
selinux/libselinux/src/selinux_restorecon.c \
|
||||
selinux/libselinux/src/sestatus.c \
|
||||
selinux/libselinux/src/setenforce.c \
|
||||
selinux/libselinux/src/setexecfilecon.c \
|
||||
selinux/libselinux/src/setfilecon.c \
|
||||
selinux/libselinux/src/setrans_client.c \
|
||||
selinux/libselinux/src/seusers.c \
|
||||
selinux/libselinux/src/sha1.c \
|
||||
selinux/libselinux/src/stringrep.c \
|
||||
selinux/libselinux/src/validatetrans.c
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
# libpcre2.a
|
||||
include $(CLEAR_VARS)
|
||||
LIBPCRE2 := $(LOCAL_PATH)/pcre/include
|
||||
LOCAL_MODULE:= libpcre2
|
||||
LOCAL_CFLAGS := -DHAVE_CONFIG_H -DPCRE2_CODE_UNIT_WIDTH=8
|
||||
LOCAL_C_INCLUDES := $(LIBPCRE2) $(LIBPCRE2)_internal
|
||||
LOCAL_EXPORT_C_INCLUDES := $(LIBPCRE2)
|
||||
LOCAL_SRC_FILES := \
|
||||
pcre/src/pcre2_auto_possess.c \
|
||||
pcre/src/pcre2_compile.c \
|
||||
pcre/src/pcre2_config.c \
|
||||
pcre/src/pcre2_context.c \
|
||||
pcre/src/pcre2_convert.c \
|
||||
pcre/src/pcre2_dfa_match.c \
|
||||
pcre/src/pcre2_error.c \
|
||||
pcre/src/pcre2_extuni.c \
|
||||
pcre/src/pcre2_find_bracket.c \
|
||||
pcre/src/pcre2_fuzzsupport.c \
|
||||
pcre/src/pcre2_maketables.c \
|
||||
pcre/src/pcre2_match.c \
|
||||
pcre/src/pcre2_match_data.c \
|
||||
pcre/src/pcre2_jit_compile.c \
|
||||
pcre/src/pcre2_newline.c \
|
||||
pcre/src/pcre2_ord2utf.c \
|
||||
pcre/src/pcre2_pattern_info.c \
|
||||
pcre/src/pcre2_script_run.c \
|
||||
pcre/src/pcre2_serialize.c \
|
||||
pcre/src/pcre2_string_utils.c \
|
||||
pcre/src/pcre2_study.c \
|
||||
pcre/src/pcre2_substitute.c \
|
||||
pcre/src/pcre2_substring.c \
|
||||
pcre/src/pcre2_tables.c \
|
||||
pcre/src/pcre2_ucd.c \
|
||||
pcre/src/pcre2_valid_utf.c \
|
||||
pcre/src/pcre2_xclass.c \
|
||||
pcre2_workaround.c
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
|
||||
# liblsplt.a
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE:= liblsplt
|
||||
|
1
native/src/external/busybox
vendored
1
native/src/external/busybox
vendored
@ -1 +0,0 @@
|
||||
Subproject commit 1c0ca97aafb9698ab7770ce1f67af1a84b469cdb
|
1
native/src/external/pcre
vendored
1
native/src/external/pcre
vendored
@ -1 +0,0 @@
|
||||
Subproject commit 8e12681a1a252fd581830b2f65d1e154a2030bb9
|
4
native/src/external/pcre2_workaround.c
vendored
4
native/src/external/pcre2_workaround.c
vendored
@ -1,4 +0,0 @@
|
||||
// Workaround pcre2_chartables.c symlink to pcre2_chartables.c.dist failing on Windows NDK if Cygwin git used,
|
||||
// and NDK not directly accepting a .c.dist file in LOCAL_SRC_FILES list.
|
||||
|
||||
#include "pcre/src/pcre2_chartables.c.dist"
|
Loading…
Reference in New Issue
Block a user