diff --git a/build_info/libkrw-dev.control b/build_info/libkrw-dev.control index a5279f87da..56ca58ae13 100644 --- a/build_info/libkrw-dev.control +++ b/build_info/libkrw-dev.control @@ -1,10 +1,10 @@ Package: libkrw-dev -Author: Siguza +Author: Cryptiiiic Maintainer: @DEB_MAINTAINER@ Architecture: @DEB_ARCH@ Version: @DEB_LIBKRW_V@ Depends: libkrw0 (= @DEB_LIBKRW_V@) Section: Development Priority: optional -Homepage: https://github.com/Siguza/libkrw +Homepage: https://github.com/Cryptiiiic/libkrw Description: A kernel R/W API for jailbreaks (Development Files) diff --git a/build_info/libkrw0-tfp0.control b/build_info/libkrw0-tfp0.control index 180fa295ba..30971cc7ce 100644 --- a/build_info/libkrw0-tfp0.control +++ b/build_info/libkrw0-tfp0.control @@ -1,5 +1,5 @@ Package: libkrw0-tfp0 -Author: Siguza +Author: Cryptiiiic Maintainer: @DEB_MAINTAINER@ Architecture: @DEB_ARCH@ Version: @DEB_LIBKRW_V@ @@ -7,5 +7,5 @@ Provides: libkrw0-plugin Enhances: libkrw0 Section: Libraries Priority: standard -Homepage: https://github.com/Siguza/libkrw +Homepage: https://github.com/Cryptiiiic/libkrw Description: Plugin for libkrw that interfaces with tfp0/hgsp4 (Shared Library) diff --git a/build_info/libkrw0.control b/build_info/libkrw0.control index 252dc6bf1b..c4f3330930 100644 --- a/build_info/libkrw0.control +++ b/build_info/libkrw0.control @@ -1,5 +1,5 @@ Package: libkrw0 -Author: Siguza +Author: Cryptiiiic Maintainer: @DEB_MAINTAINER@ Architecture: @DEB_ARCH@ Version: @DEB_LIBKRW_V@ @@ -7,5 +7,5 @@ Provides: libkrw (= @DEB_LIBKRW_V@) Depends: libkrw0-plugin Section: Libraries Priority: standard -Homepage: https://github.com/Siguza/libkrw +Homepage: https://github.com/Cryptiiiic/libkrw Description: A kernel R/W API for jailbreaks (Shared Library) diff --git a/build_info/libx8a4-1.control b/build_info/libx8a4-1.control new file mode 100644 index 0000000000..918e02b497 --- /dev/null +++ b/build_info/libx8a4-1.control @@ -0,0 +1,11 @@ +Package: libx8a4-1 +Author: Cryptiiiic +Maintainer: @DEB_MAINTAINER@ +Architecture: @DEB_ARCH@ +Version: @DEB_X8A4_V@ +Provides: libx8a4-1 (= @DEB_X8A4_V@) +Depends: libkrw0 +Section: Libraries +Priority: standard +Homepage: https://github.com/Cryptiiiic/x8A4 +Description: An all-in-one tool for firmware nonces, seeds, and downgrade support (Shared Library) diff --git a/build_info/libx8a4-dev.control b/build_info/libx8a4-dev.control new file mode 100644 index 0000000000..225fab4324 --- /dev/null +++ b/build_info/libx8a4-dev.control @@ -0,0 +1,10 @@ +Package: libx8a4-dev +Author: Cryptiiiic +Maintainer: @DEB_MAINTAINER@ +Architecture: @DEB_ARCH@ +Version: @DEB_X8A4_V@ +Depends: libx8a4-1 (= @DEB_X8A4_V@) +Section: Development +Priority: optional +Homepage: https://github.com/Cryptiiiic/x8A4 +Description: An all-in-one tool for firmware nonces, seeds, and downgrade support (Development Files) diff --git a/build_info/x8a4.control b/build_info/x8a4.control new file mode 100644 index 0000000000..ad87a9dace --- /dev/null +++ b/build_info/x8a4.control @@ -0,0 +1,12 @@ +Package: x8a4 +Name: x8A4 +Author: Cryptiiiic +Maintainer: @DEB_MAINTAINER@ +Architecture: @DEB_ARCH@ +Version: @DEB_X8A4_V@ +Depends: libx8a4-1 (= @DEB_X8A4_V@) +Enhances: dimentio +Section: Utilities +Priority: optional +Homepage: https://github.com/Cryptiiiic/x8A4 +Description: An all-in-one tool for firmware nonces, seeds, and downgrade support diff --git a/build_misc/entitlements/x8A4.xml b/build_misc/entitlements/x8A4.xml new file mode 100644 index 0000000000..fe7224dce5 --- /dev/null +++ b/build_misc/entitlements/x8A4.xml @@ -0,0 +1,21 @@ + + + + + get-task-allow + + task_for_pid-allow + + platform-application + + com.apple.private.kernel.get-kext-info + + com.apple.private.security.no-container + + com.apple.security.iokit-user-client-class + + AppleMobileApNonceUserClient + IOSurfaceRootUserClient + + + diff --git a/build_patch/choma/choma.patch b/build_patch/choma/choma.patch new file mode 100644 index 0000000000..58457fd03c --- /dev/null +++ b/build_patch/choma/choma.patch @@ -0,0 +1,121 @@ +diff --git a/src/arm64.c b/src/arm64.c +index 2b07da0..99420f5 100644 +--- a/src/arm64.c ++++ b/src/arm64.c +@@ -442,6 +442,90 @@ int arm64_dec_add_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_re + return 0; + } + ++int arm64_gen_sub_imm(arm64_register destinationReg, arm64_register sourceReg, optional_uint64_t optImm, optional_bool optS, uint32_t *bytesOut, uint32_t *maskOut) { ++ if (ARM64_REG_IS_ANY_VECTOR(destinationReg)) return -1; ++ if (ARM64_REG_IS_ANY_VECTOR(sourceReg)) return -1; ++ ++ if (!ARM64_REG_IS_ANY(destinationReg) && !ARM64_REG_IS_ANY(sourceReg)) { ++ // if both regs are set and have a mismatching width, abort ++ if (ARM64_REG_IS_W(destinationReg) != ARM64_REG_IS_W(sourceReg)) return -1; ++ } ++ ++ uint32_t inst = 0x51000000; ++ uint32_t mask = 0x7f800000; ++ if(OPT_BOOL_IS_SET(optS)) { ++ bool s = OPT_BOOL_GET_VAL(optS); ++ if(s) { ++ inst = 0x71000000; ++ mask |= (1 << 29); ++ inst |= (1 << 29); ++ } ++ } ++ ++ // if one is set and 32 bit, include 32 bit in mask and set it in inst ++ if (!ARM64_REG_IS_ANY(destinationReg)) { ++ mask |= (1 << 31); ++ inst |= ((uint32_t)(ARM64_REG_IS_X(destinationReg)) << 31); ++ } ++ else if (!ARM64_REG_IS_ANY(sourceReg)) { ++ mask |= (1 << 31); ++ inst |= ((uint32_t)(ARM64_REG_IS_X(sourceReg)) << 31); ++ } ++ ++ if (!ARM64_REG_IS_ANY(destinationReg)) { ++ mask |= 0x1F; ++ inst |= (uint32_t)(ARM64_REG_GET_NUM(destinationReg)); ++ } ++ if (!ARM64_REG_IS_ANY(sourceReg)) { ++ mask |= (0x1F << 5); ++ inst |= ((uint32_t)(ARM64_REG_GET_NUM(destinationReg)) << 5); ++ } ++ ++ if (OPT_UINT64_IS_SET(optImm)) { ++ uint64_t imm = OPT_UINT64_GET_VAL(optImm); ++ if (imm & ~0xFFF) return -1; ++ mask |= (0xFFF << 10); ++ inst |= (imm << 10); ++ } ++ ++ if (bytesOut) *bytesOut = inst; ++ if (maskOut) *maskOut = mask; ++ return 0; ++} ++ ++int arm64_dec_sub_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut, uint16_t *immOut, bool *sOut) { ++ if ((inst & 0x7f800000) != 0x51000000) { ++ if ((inst & 0x7f800000) != 0x71000000) { ++ return -1; ++ } ++ } ++ bool is64 = (inst & 0x80000000); ++ bool isS = (inst & 0x20000000); ++ bool shift = (inst & 0x400000); ++ ++ if (destinationRegOut) { ++ *destinationRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, inst & 0x1F); ++ } ++ if (sourceRegOut) { ++ *sourceRegOut = ARM64_REG(is64 ? ARM64_REG_TYPE_X : ARM64_REG_TYPE_W, (inst >> 5) & 0x1F); ++ } ++ ++ if (immOut) { ++ uint16_t imm = ((inst >> 10) & 0xFFF); ++ if (shift) { ++ imm = (imm << 12); ++ } ++ *immOut = imm; ++ } ++ ++ if (sOut) { ++ *sOut = isS; ++ } ++ ++ return 0; ++} ++ ++ + static int _arm64_gen_str_ldr_imm(uint32_t inst, uint32_t mask, char type, arm64_ldr_str_type instType, arm64_register sourceDestinationReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut) + { + if (ARM64_REG_IS_ANY_VECTOR(addrReg)) return -1; +diff --git a/src/arm64.h b/src/arm64.h +index 6cc1329..5ad903b 100644 +--- a/src/arm64.h ++++ b/src/arm64.h +@@ -85,6 +85,8 @@ int arm64_gen_mov_reg(arm64_register destinationReg, arm64_register sourceReg, u + int arm64_dec_mov_reg(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut); + int arm64_gen_add_imm(arm64_register destinationReg, arm64_register sourceReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut); + int arm64_dec_add_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut, uint16_t *immOut); ++int arm64_gen_sub_imm(arm64_register destinationReg, arm64_register sourceReg, optional_uint64_t optImm, optional_bool optS, uint32_t *bytesOut, uint32_t *maskOut); ++int arm64_dec_sub_imm(uint32_t inst, arm64_register *destinationRegOut, arm64_register *sourceRegOut, uint16_t *immOut, bool *sOut); + int arm64_gen_ldr_imm(char type, arm64_ldr_str_type instType, arm64_register destinationReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut); + int arm64_dec_ldr_imm(uint32_t inst, arm64_register *destinationReg, arm64_register *addrReg, uint64_t *immOut, char *typeOut, arm64_ldr_str_type *instTypeOut); + int arm64_gen_ldrs_imm(char type, arm64_ldr_str_type instType, arm64_register destinationReg, arm64_register addrReg, optional_uint64_t optImm, uint32_t *bytesOut, uint32_t *maskOut); + +diff --git a/src/MachOByteOrder.h b/src/MachOByteOrder.h +index 47f6f7d..56e28ea 100644 +--- a/src/MachOByteOrder.h ++++ b/src/MachOByteOrder.h +@@ -3,6 +3,7 @@ + + #include + #include ++#include + + // 8-bit integers needed for CodeDirectory + #define BIG_TO_HOST(n) _Generic((n), \ diff --git a/build_patch/libkrw/tfp0.patch b/build_patch/libkrw/tfp0.patch deleted file mode 100644 index 23d074cd0f..0000000000 --- a/build_patch/libkrw/tfp0.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/src/libkrw.c 2024-04-20 14:46:12.796173476 -0700 -+++ b/src/libkrw.c 2024-04-20 18:01:14.500961452 -0700 -@@ -160,3 +160,8 @@ - if (krw_handlers.physwrite == NULL) return ENOTSUP; - return krw_handlers.physwrite(from, to, len, granule); - } -+ -+__attribute__((visibility("hidden"))) -+int libkrw_initialization(krw_handlers_t handlers) { -+ return EPROTONOSUPPORT; -+} - ---- a/src/libkrw_tfp0.c 2021-11-01 15:47:05.000000000 -0700 -+++ b/src/libkrw_tfp0.c 2024-04-20 17:59:39.170186064 -0700 -@@ -204,8 +204,8 @@ - return EDEVERR; - } - --__attribute__((visibility("hidden"))) --int libkrw_initialization(krw_handlers_t handlers) { -+__attribute__((used)) -+int krw_initializer(krw_handlers_t handlers) { - // Make sure structure version is not lower than what we compiled with - if (handlers->version < LIBKRW_HANDLERS_VERSION) { - return EPROTONOSUPPORT; diff --git a/build_patch/xpf/xpf.patch b/build_patch/xpf/xpf.patch new file mode 100644 index 0000000000..4facd28e7c --- /dev/null +++ b/build_patch/xpf/xpf.patch @@ -0,0 +1,35 @@ +diff --git a/.gitignore b/.gitignore +index 5793cf9..3e81e77 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -4,3 +4,5 @@ xpf_test_ios + libxpf.dylib + libxpf_macos.dylib + /kernels ++ ++.idea +\ No newline at end of file +diff --git a/src/xpf.c b/src/xpf.c +index c072aaf..f5ca33f 100644 +--- a/src/xpf.c ++++ b/src/xpf.c +@@ -551,6 +551,7 @@ void xpf_stop(void) + if (gXPF.kernelPrelinkTextSection) pfsec_free(gXPF.kernelPrelinkTextSection); + if (gXPF.kernelBootdataInit) pfsec_free(gXPF.kernelBootdataInit); + if (gXPF.kernelPLKTextSection) pfsec_free(gXPF.kernelPLKTextSection); ++ if (gXPF.kernelPLKDataConstSection) pfsec_free(gXPF.kernelPLKDataConstSection); + if (gXPF.kernelInfoPlistSection) pfsec_free(gXPF.kernelInfoPlistSection); + if (gXPF.kernelContainer) fat_free(gXPF.kernelContainer); + +diff --git a/src/xpf.h b/src/xpf.h +index fddae9c..30130e0 100644 +--- a/src/xpf.h ++++ b/src/xpf.h +@@ -64,6 +64,7 @@ typedef struct s_XPF { + PFSection *kernelOSLogSection; + PFSection *kernelPrelinkTextSection; + PFSection *kernelPLKTextSection; ++ PFSection *kernelPLKDataConstSection; + PFSection *kernelBootdataInit; + PFSection *kernelAMFITextSection; + PFSection *kernelAMFIStringSection; diff --git a/makefiles/libkrw.mk b/makefiles/libkrw.mk index 79accea119..1e991acfac 100644 --- a/makefiles/libkrw.mk +++ b/makefiles/libkrw.mk @@ -6,17 +6,20 @@ ifeq (,$(findstring darwin,$(MEMO_TARGET))) ifeq ($(shell [ "$(MEMO_CFVER)" -ge 1700 ] && echo 1),1) STRAPPROJECTS += libkrw -LIBKRW_VERSION := 1.1.1 -DEB_LIBKRW_V ?= $(LIBKRW_VERSION)-2 +LIBKRW_VERSION := 1.1.2 +LIBROOT_COMMIT := 102348f5e9360ad1f509ae4958bd3ca686347ee8 +DEB_LIBKRW_V ?= $(LIBKRW_VERSION) LIBKRW_SOVERSION := 0 libkrw-setup: setup - $(call GITHUB_ARCHIVE,Siguza,libkrw,$(LIBKRW_VERSION),$(LIBKRW_VERSION)) + $(call GITHUB_ARCHIVE,Cryptiiiic,libkrw,$(LIBKRW_VERSION),v$(LIBKRW_VERSION)) $(call EXTRACT_TAR,libkrw-$(LIBKRW_VERSION).tar.gz,libkrw-$(LIBKRW_VERSION),libkrw) - $(call DO_PATCH,libkrw,libkrw,-p1) + $(call GITHUB_ARCHIVE,opa334,libroot,$(LIBROOT_COMMIT),$(LIBROOT_COMMIT),libroot) + $(call EXTRACT_TAR,libroot-$(LIBROOT_COMMIT).tar.gz,libroot-$(LIBROOT_COMMIT),libroot) + cp -a $(BUILD_WORK)/libroot $(BUILD_WORK)/libkrw/external + rm -rf $(BUILD_WORK)/libroot mkdir -p $(BUILD_STAGE)/libkrw/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/{include,lib/libkrw} - sed -i 's|/usr/lib|$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib|g' $(BUILD_WORK)/libkrw/src/libkrw.c ifneq ($(wildcard $(BUILD_WORK)/libkrw/.build_complete),) libkrw: @@ -25,15 +28,33 @@ else libkrw: libkrw-setup mkdir -p $(BUILD_WORK)/libkrw/src/.lib/ + # libroot.o + if [ ! -z "$(findstring rootless,$(MEMO_TARGET))" ]; then \ + $(CC) $(CFLAGS) \ + -I$(BUILD_WORK)/libkrw/external/libroot/src \ + -c -o $(BUILD_WORK)/libkrw/src/.lib/libroot.o \ + -DIPHONEOS_ARM64 \ + $(BUILD_WORK)/libkrw/external/libroot/src/dyn.c; \ + else \ + $(CC) $(CFLAGS) \ + -I$(BUILD_WORK)/libkrw/external/libroot/src \ + -c -o $(BUILD_WORK)/libkrw/src/.lib/libroot.o \ + -DTARGET=libkrw \ + $(BUILD_WORK)/libkrw/external/libroot/src/dyn.c; \ + fi # libkrw.o $(CC) $(CFLAGS) \ -I$(BUILD_WORK)/libkrw/include \ + -I$(BUILD_WORK)/libkrw/external/libroot/src \ + -DTARGET="\"libkrw\"" \ -c -o $(BUILD_WORK)/libkrw/src/.lib/libkrw.o \ $(BUILD_WORK)/libkrw/src/libkrw.c # libkrw_tfp0.o $(CC) $(CFLAGS) \ -I$(BUILD_WORK)/libkrw/include \ + -I$(BUILD_WORK)/libkrw/external/libroot/src \ + -DTARGET="\"libkrw\"" \ -c -o $(BUILD_WORK)/libkrw/src/.lib/libkrw_tfp0.o \ $(BUILD_WORK)/libkrw/src/libkrw_tfp0.c @@ -42,7 +63,7 @@ libkrw: libkrw-setup -I$(BUILD_WORK)/libkrw/include \ -install_name "$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib/libkrw.$(LIBKRW_SOVERSION).dylib" \ -o $(BUILD_STAGE)/libkrw/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib/libkrw.$(LIBKRW_SOVERSION).dylib \ - $(BUILD_WORK)/libkrw/src/.lib/libkrw.o \ + $(BUILD_WORK)/libkrw/src/.lib/{libroot,libkrw}.o \ $(LDFLAGS) # libkrw-tfp0.dylib diff --git a/makefiles/x8A4.mk b/makefiles/x8A4.mk new file mode 100644 index 0000000000..6894badfb8 --- /dev/null +++ b/makefiles/x8A4.mk @@ -0,0 +1,96 @@ +ifneq ($(PROCURSUS),1) +$(error Use the main Makefile) +endif + +ifeq (,$(findstring darwin,$(MEMO_TARGET))) +ifeq ($(shell [ "$(MEMO_CFVER)" -ge 1700 ] && echo 1),1) + +SUBPROJECTS += x8A4 +X8A4_VERSION := 1.0.2 +CHOMA_COMMIT := 2fcc1fc51f6eb778756ccdee3c809bf83a767996 +XPF_COMMIT := 19798b65bd7eb3014261a550e666335aff439156 +DEB_X8A4_V ?= $(X8A4_VERSION) + +LIBX8A4_SOVERSION := 1 + +x8A4-setup: setup + $(call GITHUB_ARCHIVE,Cryptiiiic,x8A4,$(X8A4_VERSION),v$(X8A4_VERSION)) + $(call EXTRACT_TAR,x8A4-$(X8A4_VERSION).tar.gz,x8A4-$(X8A4_VERSION),x8A4) + rm -rf $(BUILD_WORK)/x8A4/Lib/{ChOma,XPF} $(BUILD_WORK)/x8A4/Lib/lib{choma,XPF}.a + $(call GITHUB_ARCHIVE,opa334,ChOma,$(CHOMA_COMMIT),$(CHOMA_COMMIT),ChOma) + $(call GITHUB_ARCHIVE,opa334,XPF,$(XPF_COMMIT),$(XPF_COMMIT),XPF) + $(call EXTRACT_TAR,ChOma-$(CHOMA_COMMIT).tar.gz,ChOma-$(CHOMA_COMMIT),x8A4/Lib/ChOma) + $(call EXTRACT_TAR,XPF-$(XPF_COMMIT).tar.gz,XPF-$(XPF_COMMIT),x8A4/Lib/XPF) + $(call DO_PATCH,choma,x8A4/Lib/ChOma,-p1) + $(call DO_PATCH,xpf,x8A4/Lib/XPF,-p1) + rm -rf $(BUILD_WORK)/x8A4/Lib/XPF/external/ios/include/choma/* $(BUILD_WORK)/x8A4/Lib/XPF/external/ios/lib/libchoma.* + rm -rf $(BUILD_WORK)/x8A4/Include/XPF/* $(BUILD_WORK)/x8A4/Include/choma/* $(BUILD_WORK)/x8A4/Lib/XPF/external/ios/lib/libchoma.* + cp -a $(BUILD_WORK)/x8A4/Lib/ChOma/src/*.h $(BUILD_WORK)/x8A4/Lib/XPF/external/ios/include/choma/ + cp -a $(BUILD_WORK)/x8A4/Lib/ChOma/src/*.h $(BUILD_WORK)/x8A4/Include/choma/ + cp -a $(BUILD_WORK)/x8A4/Lib/XPF/src/*.h $(BUILD_WORK)/x8A4/Include/XPF + mkdir -p $(BUILD_STAGE)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/{include,lib,bin} + + +ifneq ($(wildcard $(BUILD_WORK)/x8A4/.build_complete),) +x8A4: + @echo "Using previously built x8A4." +else +x8A4: x8A4-setup + # libchoma.a + cd $(BUILD_WORK)/x8A4/Lib/ChOma && \ + rm -rf $(BUILD_WORK)/x8A4/Lib/libchoma.a src/*.o; \ + for file in src/*.c; do \ + $(CC) -Isrc $(CFLAGS) -c -o $$file.o $$file; \ + done; \ + ar r $(BUILD_WORK)/x8A4/Lib/libchoma.a src/*o; \ + # libxpf.a + cd $(BUILD_WORK)/x8A4/Lib/XPF && \ + rm -rf $(BUILD_WORK)/x8A4/Lib/libxpf.a src/*.o; \ + for file in src/*.c; do \ + $(CC) -Iexternal/ios/include $(CFLAGS) -c -o $$file.o $$file; \ + done; \ + ar r $(BUILD_WORK)/x8A4/Lib/libxpf.a src/*o; \ + # x8A4 + cd $(BUILD_WORK)/x8A4 && cmake . \ + $(DEFAULT_CMAKE_FLAGS) \ + -DRELEASE=1 + +$(MAKE) -C $(BUILD_WORK)/x8A4 + cp -a $(BUILD_WORK)/x8A4/libx8A4.dylib $(BUILD_WORK)/x8A4/libx8A4.$(LIBX8A4_SOVERSION).dylib $(BUILD_STAGE)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib/ + cp -a $(BUILD_WORK)/x8A4/x8A4_CLI $(BUILD_STAGE)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/bin/x8A4 + cp -a $(BUILD_WORK)/x8A4/Include/x8A4 $(BUILD_STAGE)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/include + $(call AFTER_BUILD,copy) +endif + +x8A4-package: x8A4-stage + # x8A4.mk Package Structure + rm -rf $(BUILD_DIST)/libx8A4{-$(LIBX8A4_SOVERSION),-dev} $(BUILD_DIST)/x8A4 + mkdir -p $(BUILD_DIST)/libx8A4-$(LIBX8A4_SOVERSION)/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib \ + $(BUILD_DIST)/libx8A4-$(LIBX8A4_SOVERSION)/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib \ + $(BUILD_DIST)/libx8A4-dev/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/{lib,include} \ + $(BUILD_DIST)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/bin + + # x8A4.mk Prep libx8A4 + cp -a $(BUILD_STAGE)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib/libx8A4.$(LIBX8A4_SOVERSION).dylib $(BUILD_DIST)/libx8A4-$(LIBX8A4_SOVERSION)/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib + + # x8A4.mk Prep libkrw-dev + cp -a $(BUILD_STAGE)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib/libx8A4.dylib $(BUILD_DIST)/libx8A4-dev/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/lib + cp -a $(BUILD_STAGE)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/include/x8A4 $(BUILD_DIST)/libx8A4-dev/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/include + + # x8A4.mk Prep x8A4 + cp -a $(BUILD_STAGE)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/bin/x8A4 $(BUILD_DIST)/x8A4/$(MEMO_PREFIX)$(MEMO_SUB_PREFIX)/bin + + # x8A4.mk Sign + $(call SIGN,libx8A4-$(LIBX8A4_SOVERSION),general.xml) + $(call SIGN,x8A4,x8A4.xml) + + # x8A4.mk Make .debs + $(call PACK,libx8a4-$(LIBX8A4_SOVERSION),DEB_X8A4_V) + $(call PACK,libx8a4-dev,DEB_X8A4_V) + $(call PACK,x8a4,DEB_X8A4_V) + + # x8A4.mk Build cleanup + rm -rf $(BUILD_DIST)/libx8A4{-$(LIBX8A4_SOVERSION),-dev} $(BUILD_DIST)/x8A4 + +.PHONY: x8A4 x8A4-package +endif +endif