diff --git a/loader/build.gradle.kts b/loader/build.gradle.kts index 7e0b365..a785e25 100644 --- a/loader/build.gradle.kts +++ b/loader/build.gradle.kts @@ -15,12 +15,27 @@ fun Project.findInPath(executable: String, property: String): String? { }?.absolutePath ?: properties.getOrDefault(property, null) as? String? } -val ccachePatch by lazy { +val ccachePath by lazy { project.findInPath("ccache", "ccache.path")?.also { println("loader: Use ccache: $it") } } +val defaultCFlags = arrayOf( + "-Wall", "-Wextra", + "-fno-rtti", "-fno-exceptions", + "-fno-stack-protector", "-fomit-frame-pointer", + "-Wno-builtin-macro-redefined", "-D__FILE__=__FILE_NAME__" +) + +val releaseFlags = arrayOf( + "-Oz", "-flto", + "-Wno-unused", "-Wno-unused-parameter", + "-fvisibility=hidden", "-fvisibility-inlines-hidden", + "-fno-unwind-tables", "-fno-asynchronous-unwind-tables", + "-Wl,--exclude-libs,ALL", "-Wl,--gc-sections", "-Wl,--strip-all" +) + android { buildFeatures { androidResources = false @@ -28,16 +43,27 @@ android { prefab = true } - externalNativeBuild.ndkBuild { - path("src/Android.mk") + externalNativeBuild.cmake { + path("src/CMakeLists.txt") } defaultConfig { - externalNativeBuild { - ndkBuild { - ccachePatch?.let { - arguments += "NDK_CCACHE=$it" - } + externalNativeBuild.cmake { + arguments += "-DANDROID_STL=none" + arguments += "-DLSPLT_STANDALONE=ON" + cFlags("-std=c18", *defaultCFlags) + cppFlags("-std=c++20", *defaultCFlags) + ccachePath?.let { + arguments += "-DNDK_CCACHE=$it" + } + } + } + + buildTypes { + release { + externalNativeBuild.cmake { + cFlags += releaseFlags + cppFlags += releaseFlags } } } diff --git a/loader/src/Android.mk b/loader/src/Android.mk deleted file mode 100644 index 2846d1f..0000000 --- a/loader/src/Android.mk +++ /dev/null @@ -1,26 +0,0 @@ -LOCAL_PATH := $(call my-dir) -define walk - $(wildcard $(1)) $(foreach e, $(wildcard $(1)/*), $(call walk, $(e))) -endef - -include $(CLEAR_VARS) -LOCAL_MODULE := common -LOCAL_C_INCLUDES := $(LOCAL_PATH)/include -FILE_LIST := $(filter %.cpp, $(call walk, $(LOCAL_PATH)/common)) -LOCAL_SRC_FILES := $(FILE_LIST:COMMON_FILE_LIST:$(LOCAL_PATH)/%=%) -LOCAL_STATIC_LIBRARIES := cxx -LOCAL_LDLIBS := -llog -include $(BUILD_STATIC_LIBRARY) - -include $(CLEAR_VARS) -LOCAL_MODULE := zygisk -LOCAL_C_INCLUDES := $(LOCAL_PATH)/include -FILE_LIST := $(filter %.cpp, $(call walk, $(LOCAL_PATH)/injector)) -LOCAL_SRC_FILES := $(FILE_LIST:COMMON_FILE_LIST:$(LOCAL_PATH)/%=%) -LOCAL_STATIC_LIBRARIES := cxx common liblsplt libphmap -LOCAL_LDLIBS := -llog -include $(BUILD_SHARED_LIBRARY) - -$(call import-module,prefab/cxx) - -include src/external/Android.mk diff --git a/loader/src/Application.mk b/loader/src/Application.mk deleted file mode 100644 index 9ac9783..0000000 --- a/loader/src/Application.mk +++ /dev/null @@ -1,14 +0,0 @@ -APP_CFLAGS := -Wall -Wextra -APP_CFLAGS += -fno-stack-protector -fomit-frame-pointer -APP_CFLAGS += -Wno-builtin-macro-redefined -D__FILE__=__FILE_NAME__ -APP_CPPFLAGS := -std=c++20 -APP_CONLYFLAGS := -std=c18 -APP_STL := none - -ifneq ($(NDK_DEBUG),1) -APP_CFLAGS += -Oz -flto -APP_CFLAGS += -Wno-unused -Wno-unused-parameter -APP_CFLAGS += -fvisibility=hidden -fvisibility-inlines-hidden -APP_CFLAGS += -fno-unwind-tables -fno-asynchronous-unwind-tables -APP_LDFLAGS += -Wl,--exclude-libs,ALL -flto -Wl,--gc-sections -Wl,--strip-all -endif diff --git a/loader/src/CMakeLists.txt b/loader/src/CMakeLists.txt new file mode 100644 index 0000000..7bf53e1 --- /dev/null +++ b/loader/src/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.22.1) +project("loader") + +find_package(cxx REQUIRED CONFIG) + +aux_source_directory(common COMMON_SRC_LIST) +add_library(common STATIC ${COMMON_SRC_LIST}) +target_include_directories(common PRIVATE include) +target_link_libraries(common cxx::cxx log) + +aux_source_directory(injector INJECTOR_SRC_LIST) +add_library(zygisk SHARED ${INJECTOR_SRC_LIST}) +target_include_directories(zygisk PRIVATE include) +target_link_libraries(zygisk cxx::cxx log common lsplt_static phmap) + +add_subdirectory(external) diff --git a/loader/src/external/Android.mk b/loader/src/external/Android.mk deleted file mode 100644 index 43e76d1..0000000 --- a/loader/src/external/Android.mk +++ /dev/null @@ -1,21 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -# liblsplt.a -include $(CLEAR_VARS) -LOCAL_MODULE:= liblsplt -LOCAL_C_INCLUDES := $(LOCAL_PATH)/lsplt/lsplt/src/main/jni/include -LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES) -LOCAL_CFLAGS := -Wall -Wextra -Werror -fvisibility=hidden -DLOG_DISABLED -LOCAL_CPPFLAGS := -std=c++20 -LOCAL_STATIC_LIBRARIES := libcxx -LOCAL_SRC_FILES := \ - lsplt/lsplt/src/main/jni/elf_util.cc \ - lsplt/lsplt/src/main/jni/lsplt.cc -include $(BUILD_STATIC_LIBRARY) - -# Header only library -include $(CLEAR_VARS) -LOCAL_MODULE:= libphmap -LOCAL_CFLAGS := -Wno-unused-value -LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/parallel-hashmap -include $(BUILD_STATIC_LIBRARY) diff --git a/loader/src/external/CMakeLists.txt b/loader/src/external/CMakeLists.txt new file mode 100644 index 0000000..8f8d2e3 --- /dev/null +++ b/loader/src/external/CMakeLists.txt @@ -0,0 +1,8 @@ +project(external) + +OPTION(LSPLT_BUILD_SHARED OFF) +add_subdirectory(lsplt/lsplt/src/main/jni) + +add_library(phmap INTERFACE) +target_include_directories(phmap INTERFACE parallel-hashmap) +target_compile_options(phmap INTERFACE -Wno-unused-value)