Files
palera1n/.github/workflows/build.yml
T
2023-01-28 14:41:05 +08:00

604 lines
28 KiB
YAML

name: Build palera1n
on:
push:
pull_request:
workflow_dispatch:
jobs:
build-darwin:
strategy:
matrix:
include:
- arch: x86_64
gnu_triple: x86_64-apple-darwin
os: macosx
minos: 10.8
- arch: arm64
gnu_triple: aarch64-apple-darwin
os: macosx
minos: 11.0
- arch: arm64
gnu_triple: aarch64-apple-darwin
os: iphoneos
minos: 14.0
runs-on: macos-latest
env:
MBEDTLS_VERSION: 3.3.0
LIBUSB_VERSION: 1.0.26
READLINE_VERSION: 8.2
NCURSES_VERSION: 6.4
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install dependencies (packages)
run: |
sudo /usr/local/bin/pip3 install jsonschema jinja2
brew install make autoconf automake pkg-config gnu-sed
sudo rm -rf /usr/local/Frameworks/Python*
curl -LO https://github.com/ProcursusTeam/ldid/releases/download/v2.1.5-procursus7/ldid_macosx_x86_64
sudo install -m755 ldid_macosx_x86_64 /usr/local/bin/ldid
- name: Download dependencies (embedded binaries)
run: |
cd src
curl -LOOO https://cdn.nickchan.lol/palera1n/c-rewrite/deps/checkra1n-kpf-pongo \
https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg \
https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg
cd ..
make -j5 download-checkra1n
echo "SDK=$(xcrun -sdk ${{ matrix.os }} --show-sdk-path)" >> $GITHUB_ENV
- name: Download dependencies (source code)
run: |
curl -LOOO \
https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${{ env.MBEDTLS_VERSION }}.tar.gz \
https://github.com/libusb/libusb/releases/download/v${{ env.LIBUSB_VERSION }}/libusb-${{ env.LIBUSB_VERSION }}.tar.bz2 \
https://mirror-hk.koddos.net/gnu/readline/readline-${{ env.READLINE_VERSION }}.tar.gz \
https://mirror-hk.koddos.net/gnu/ncurses/ncurses-${{ env.NCURSES_VERSION }}.tar.gz
tar -xf v${{ env.MBEDTLS_VERSION }}.tar.gz
tar -xjf libusb-${{ env.LIBUSB_VERSION }}.tar.bz2
tar -xf readline-${{ env.READLINE_VERSION }}.tar.gz
tar -xf ncurses-${{ env.NCURSES_VERSION }}.tar.gz
git clone --depth=1 https://github.com/libimobiledevice/libplist
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice-glue
git clone --depth=1 https://github.com/libimobiledevice/libirecovery
git clone --depth=1 https://github.com/libimobiledevice/libusbmuxd
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice
- name: Setup environment
run: |
mkdir sysroot
echo "DESTDIR=$(pwd)/sysroot" >> $GITHUB_ENV
echo "PREFIX=/usr/local" >> $GITHUB_ENV
echo "PKG_CONFIG_PATH=$(pwd)/sysroot/usr/local/lib/pkgconfig" >> $GITHUB_ENV
echo "CONFIGURE_ARGS=--prefix=/usr/local --disable-shared --enable-static --build=x86_64-apple-darwin --host=${{ matrix.gnu_triple }}" >> $GITHUB_ENV
echo "CC=$(xcrun --find cc)" >> $GITHUB_ENV
echo "CXX=$(xcrun --find c++)" >> $GITHUB_ENV
echo "CFLAGS=-g -Os -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include" >> $GITHUB_ENV
echo "CXXFLAGS=-stdlib=libc++ -g -Os -isysroot ${{ env.SDK }} -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isystem $(pwd)/sysroot/usr/local/include" >> $GITHUB_ENV
echo "LDFLAGS=-g -Wl,-dead_strip -arch ${{ matrix.arch }} -isysroot ${{ env.SDK }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
mkdir -p $(pwd)/sysroot/usr/local/lib
ln -sf $(pwd)/sysroot/usr/local/lib{,64}
- name: Prepare headers
if: matrix.os != 'macosx'
run: |
mkdir -p sysroot/{{,System}/Library/Frameworks,/usr/{local/include/{bsm,objc,os/internal,sys,firehose,CoreFoundation,FSEvents,IOKit/kext,libkern,kern,arm,{mach/,}machine,CommonCrypto,Security,CoreSymbolication,Kernel/{kern,IOKit,libkern},rpc,rpcsvc,xpc/private,ktrace,mach-o,dispatch},lib/pkgconfig,/local/lib}}
MACOSX_SYSROOT=$(xcrun -sdk macosx --show-sdk-path)
TARGET_SYSROOT=$(xcrun -sdk ${{ matrix.os }} --show-sdk-path)
cp -af ${MACOSX_SYSROOT}/usr/include/{arpa,bsm,hfs,net,xpc,netinet,servers,timeconv.h,launch.h} sysroot/usr/local/include
cp -af ${MACOSX_SYSROOT}/usr/include/objc/objc-runtime.h sysroot/usr/local/include/objc
cp -af ${MACOSX_SYSROOT}/usr/include/libkern/{OSDebug.h,OSKextLib.h,OSReturn.h,OSThermalNotification.h,OSTypes.h,machine} sysroot/usr/local/include/libkern
cp -af ${MACOSX_SYSROOT}/usr/include/kern sysroot/usr/local/include
cp -af ${MACOSX_SYSROOT}/usr/include/sys/{tty*,ptrace,kern*,random,reboot,user,vnode,disk,vmmeter,conf}.h sysroot/usr/local/include/sys
cp -af ${MACOSX_SYSROOT}/System/Library/Frameworks/Kernel.framework/Versions/Current/Headers/sys/disklabel.h sysroot/usr/local/include/sys
cp -af ${MACOSX_SYSROOT}/System/Library/Frameworks/IOKit.framework/Headers/{AppleConvergedIPCKeys.h,IOBSD.h,IOCFBundle.h,IOCFPlugIn.h,IOCFURLAccess.h,IOKitServer.h,IORPC.h,IOSharedLock.h,IOUserServer.h,audio,avc,firewire,graphics,hid,hidsystem,i2c,iokitmig.h,kext,ndrvsupport,network,ps,pwr_mgt,sbp2,scsi,serial,storage,stream,usb,video} sysroot/usr/local/include/IOKit
cp -af ${MACOSX_SYSROOT}/System/Library/Frameworks/Security.framework/Headers/{mds_schema,oidsalg,SecKeychainSearch,certextensions,Authorization,eisl,SecDigestTransform,SecKeychainItem,oidscrl,cssmcspi,CSCommon,cssmaci,SecCode,CMSDecoder,oidscert,SecRequirement,AuthSession,SecReadTransform,oids,cssmconfig,cssmkrapi,SecPolicySearch,SecAccess,cssmtpi,SecACL,SecEncryptTransform,cssmapi,cssmcli,mds,x509defs,oidsbase,SecSignVerifyTransform,cssmspi,cssmkrspi,SecTask,cssmdli,SecAsn1Coder,cssm,SecTrustedApplication,SecCodeHost,SecCustomTransform,oidsattr,SecIdentitySearch,cssmtype,SecAsn1Types,emmtype,SecTransform,SecTrustSettings,SecStaticCode,emmspi,SecTransformReadTransform,SecKeychain,SecDecodeTransform,CodeSigning,AuthorizationPlugin,cssmerr,AuthorizationTags,CMSEncoder,SecEncodeTransform,SecureDownload,SecAsn1Templates,AuthorizationDB,SecCertificateOIDs,cssmapple}.h sysroot/usr/local/include/Security
cp -af ${MACOSX_SYSROOT}/usr/include/{ar,bootstrap,launch,libc,libcharset,localcharset,nlist,NSSystemDirectories,tzfile,vproc}.h sysroot/usr/local/include
cp -af ${MACOSX_SYSROOT}/usr/include/mach/{*.defs,{mach_vm,shared_region}.h} sysroot/usr/local/include/mach
cp -af ${MACOSX_SYSROOT}/usr/include/mach/machine/*.defs sysroot/usr/local/include/mach/machine
cp -af ${MACOSX_SYSROOT}/usr/include/rpc/pmap_clnt.h sysroot/usr/local/include/rpc
cp -af ${MACOSX_SYSROOT}/usr/include/rpcsvc/yp{_prot,clnt}.h sysroot/usr/local/include/rpcsvc
cp -af ${TARGET_SYSROOT}/usr/include/mach/machine/thread_state.h sysroot/usr/local/include/mach/machine
cp -af ${TARGET_SYSROOT}/usr/include/mach/arm sysroot/usr/local/include/mach
cp -af ${MACOSX_SYSROOT}/System/Library/Frameworks/IOKit.framework/Headers/* sysroot/usr/local/include/IOKit
gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < ${TARGET_SYSROOT}/usr/include/stdlib.h > sysroot/usr/local/include/stdlib.h
gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < ${TARGET_SYSROOT}/usr/include/time.h > sysroot/usr/local/include/time.h
gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < ${TARGET_SYSROOT}/usr/include/unistd.h > sysroot/usr/local/include/unistd.h
gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < ${TARGET_SYSROOT}/usr/include/mach/task.h > sysroot/usr/local/include/mach/task.h
gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < ${TARGET_SYSROOT}/usr/include/mach/mach_host.h > sysroot/usr/local/include/mach/mach_host.h
gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < ${TARGET_SYSROOT}/usr/include/ucontext.h > sysroot/usr/local/include/ucontext.h
gsed -E s/'__IOS_PROHIBITED|__TVOS_PROHIBITED|__WATCHOS_PROHIBITED'//g < ${TARGET_SYSROOT}/usr/include/signal.h > sysroot/usr/local/include/signal.h
gsed -E /'__API_UNAVAILABLE'/d < ${TARGET_SYSROOT}/usr/include/pthread.h > sysroot/usr/local/include/pthread.h
gsed -i -E s/'__API_UNAVAILABLE\(.*\)'// sysroot/usr/local/include/IOKit/IOKitLib.h
- name: Build ncurses
run: |
cd ncurses-${{ env.NCURSES_VERSION }}
./configure \
--with-build-cc="${{ env.CC }}" \
--with-build-cflags="-Os" \
--with-build-cpp="${{ env.CC }} -E" \
--with-build-cppflags=" " \
--with-build-ldflags=" " \
--with-pthread \
--disable-overwrite \
--without-debug \
--without-tests \
--enable-sigwinch \
--enable-const \
--enable-symlinks \
--enable-termcap \
--enable-pc-files \
--without-x11-rgb \
--with-pkg-config-libdir="${{ env.PREFIX }}/lib/pkgconfig" \
--enable-widec \
--with-default-terminfo-dir="/usr/share/terminfo" \
--with-terminfo-dirs="/opt/homebrew/share/terminfo:/usr/local/share/terminfo:/usr/share/terminfo" \
LDFLAGS="${{ env.LDFLAGS }}" \
PKG_CONFIG_LIBDIR="${{ env.PREFIX }}/lib/pkgconfig"
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build Mbed TLS
run: |
cd mbedtls-${{ env.MBEDTLS_VERSION }}
cat ../patches/0001-Allow-empty-x509-cert-issuer.patch | patch -sN -d . -p1
mkdir build
cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CROSSCOMPILING=true \
-DCMAKE_SYSTEM_NAME=Darwin \
-DCMAKE_C_COMPILER="${{ env.CC }}" \
-DCMAKE_C_FLAGS='${{ env.CFLAGS }}' \
-DCMAKE_FIND_ROOT_PATH="${{ env.DESTDIR }}" \
-DCMAKE_INSTALL_PREFIX="${{ env.PREFIX }}" \
-DMBEDTLS_PYTHON_EXECUTABLE="/usr/local/bin/python3" \
-DENABLE_TESTING=OFF \
-DENABLE_PROGRAMS=OFF \
-DMBEDTLS_FATAL_WARNINGS=OFF \
-DCMAKE_INSTALL_SYSCONFDIR="/etc"
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libusb
run: |
cd libusb-${{ env.LIBUSB_VERSION }}
if [ "${{ matrix.os }}" != "macosx" ]; then
curl -Lo libusb.patch https://github.com/ProcursusTeam/Procursus/raw/5f4f302f6cb81ce10c7d92ffefd75c004b5da18f/build_patch/libusb/0001-Get-rid-of-some-macro-checks.patch
cat libusb.patch | patch -sN -d . -p1
fi
./configure ${{ env.CONFIGURE_ARGS }} --disable-udev --enable-log
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build readline
run: |
cd readline-${{ env.READLINE_VERSION }}
CC=clang CXX=clang++ ./configure ${{ env.CONFIGURE_ARGS }} ac_cv_type_sig_atomic_t=no
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libplist
run: |
cd libplist
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --without-cython
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libimobiledevice-glue
run: |
cd libimobiledevice-glue
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }}
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libirecovery
run: |
sudo cp -a sysroot/usr/local/* /usr/local
cd libirecovery
autoreconf -fiv
if [ "${{ matrix.os }}" != "macosx" ]; then
./configure ${{ env.CONFIGURE_ARGS }} --with-iokit=no
else
./configure ${{ env.CONFIGURE_ARGS }}
fi
echo -e 'all:\ninstall:' > tools/Makefile
make -j$(sysctl -n hw.ncpu) LIBS="-lncurses"
make -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
install -m644 src/.libs/libirecovery-1.0.a ${{ env.DESTDIR }}${{ env.PREFIX }}/lib
cd ..
- name: Build libusbmuxd
run: |
cd libusbmuxd
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }}
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libimobiledevice
run: |
cd libimobiledevice
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --with-mbedtls --enable-debug
echo -e 'all:\ninstall:' > tools/Makefile
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build palera1n
run: |
cp -a sysroot/${{ env.PREFIX }}/{include,lib} dep_root
if [ "${{ matrix.os }}" = "macosx" ]; then
gmake -j$(sysctl -n hw.ncpu)
elif [ "${{ matrix.os }}" = "iphoneos" ]; then
gmake -j$(sysctl -n hw.ncpu) FAKE_PLATFORM=2 FAKE_SDK=14.0 FAKE_MINOS=14.0
fi
mv src/palera1n palera1n-${{ matrix.os }}-${{ matrix.arch }}
dsymutil palera1n-${{ matrix.os }}-${{ matrix.arch }}
strip palera1n-${{ matrix.os }}-${{ matrix.arch }}
ldid -s palera1n-${{ matrix.os }}-${{ matrix.arch }}
mkdir -p ready
tar -zcf ready/dep_root-${{ matrix.os }}-${{ matrix.arch }}.tgz dep_root
- name: Upload artifact
uses: wangyucode/[email protected]
with:
host: ${{ secrets.NICKCHAN_FTP_HOST }}
port: ${{ secrets.NICKCHAN_FTP_PORT }}
username: palera1n
privateKey: ${{ secrets.NICKCHAN_FTP_KEY }}
forceUpload: true
dryRun: false
localDir: 'ready/'
remoteDir: '/palera1n/artifacts/c-rewrite'
- name: Upload artifact
uses: wangyucode/[email protected]
with:
host: ${{ secrets.MINEEK_FTP_HOST }}
port: 22
username: mineekfiles
password: ${{ secrets.MINEEK_FTP_PASS }}
forceUpload: true
dryRun: false
localDir: 'ready/'
remoteDir: '/uploads/palera1n/artifacts/palera1n-c'
- name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} build
uses: actions/upload-artifact@v3
with:
name: palera1n-${{ matrix.os }}-${{ matrix.arch }}
path: palera1n-${{ matrix.os }}-${{ matrix.arch }}
retention-days: 1
- name: Upload ${{ matrix.os }} thin ${{ matrix.arch }} debug symbols
uses: actions/upload-artifact@v3
with:
name: palera1n-${{ matrix.os }}-${{ matrix.arch }}.dSYM
path: palera1n-${{ matrix.os }}-${{ matrix.arch }}.dSYM
retention-days: 1
darwin-dist:
runs-on: macos-latest
needs: build-darwin
steps:
- name: Download all Darwin artifacts
uses: actions/download-artifact@v3
- name: Prepare artifact
run: |
find .
lipo -create -arch arm64 ./palera1n-macosx-arm64/palera1n-macosx-arm64 -arch x86_64 ./palera1n-macosx-x86_64/palera1n-macosx-x86_64 -output palera1n-macos
mkdir -p palera1n-macos.dSYM/Contents/Resources/DWARF
cp ./palera1n-macosx-x86_64.dSYM/Contents/Info.plist palera1n-macos.dSYM/Contents
lipo -create -arch arm64 palera1n-macosx-arm64.dSYM/Contents/Resources/DWARF/palera1n-macosx-arm64 -arch x86_64 palera1n-macosx-x86_64.dSYM/Contents/Resources/DWARF/palera1n-macosx-x86_64 -output palera1n-macos.dSYM/Contents/Resources/DWARF/palera1n-macos
mkdir ready
cp palera1n-macos ready/palera1n-macos-universal
cp ./palera1n-macosx-x86_64/palera1n-macosx-x86_64 ready/palera1n-macos-x86_64
cp ./palera1n-macosx-arm64/palera1n-macosx-arm64 ready/palera1n-macos-arm64
cp ./palera1n-iphoneos-arm64/palera1n-iphoneos-arm64 ready/palera1n-ios
zip -r9 ready/palera1n-ios.dSYM.zip palera1n-iphoneos-arm64.dSYM
zip -r9 ready/palera1n-macos.dSYM.zip palera1n-macos.dSYM
- name: Upload artifact
uses: wangyucode/[email protected]
with:
host: ${{ secrets.NICKCHAN_FTP_HOST }}
port: ${{ secrets.NICKCHAN_FTP_PORT }}
username: palera1n
privateKey: ${{ secrets.NICKCHAN_FTP_KEY }}
forceUpload: true
dryRun: false
localDir: 'ready/'
remoteDir: '/palera1n/artifacts/c-rewrite'
- name: Upload artifact
uses: wangyucode/[email protected]
with:
host: ${{ secrets.MINEEK_FTP_HOST }}
port: 22
username: mineekfiles
password: ${{ secrets.MINEEK_FTP_PASS }}
forceUpload: true
dryRun: false
localDir: 'ready/'
remoteDir: '/uploads/palera1n/artifacts/palera1n-c'
build-Linux:
strategy:
matrix:
triple:
- i486-linux-musl
- x86_64-linux-musl
- armel-linux-musleabi
- aarch64-linux-musl
runs-on: ubuntu-latest
env:
MBEDTLS_VERSION: 3.3.0
LIBUSB_VERSION: 1.0.26
READLINE_VERSION: 8.2
NCURSES_VERSION: 6.4
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install build dependencies (packages)
run: |
sudo apt remove -y libssl-dev libreadline-dev
sudo apt install -y pkg-config autoconf automake
sudo pip3 install jsonschema jinja2
- name: Download toolchain checksum
run: |
curl -LO https://musl.cc/SHA512SUMS
echo "TOOLCHAIN_CHECKSUM="$(grep ${{ matrix.triple }}-cross.tgz SHA512SUMS | cut -d' ' -f1) >> $GITHUB_ENV
- name: Download toolchain (cached)
id: toolchain_cache
uses: actions/cache@v3
with:
path: ${{ matrix.triple }}-cross.tgz
key: ${{ matrix.triple }}-${{ env.TOOLCHAIN_CHECKSUM }}-toolchain
- name: Download toolchain
if: steps.toolchain_cache.outputs.cache-hit != 'true'
run: |
curl -LO https://musl.cc/${{ matrix.triple }}-cross.tgz
- name: Setup environment
run: |
tar -xf ${{ matrix.triple }}-cross.tgz
mkdir sysroot
echo "$(pwd)/${{ matrix.triple }}-cross/bin" >> $GITHUB_PATH
case ${{ matrix.triple }} in
i486-linux-musl)
echo "CHECKRA1N_NAME=linux-x86" >> $GITHUB_ENV
;;
x86_64-linux-musl)
echo "CHECKRA1N_NAME=linux-x86_64" >> $GITHUB_ENV
;;
armel-linux-musleabi)
echo "CHECKRA1N_NAME=linux-armel" >> $GITHUB_ENV
;;
aarch64-linux-musl)
echo "CHECKRA1N_NAME=linux-arm64" >> $GITHUB_ENV
;;
esac
echo "PKG_CONFIG_PATH=$(pwd)/sysroot/usr/local/lib/pkgconfig" >> $GITHUB_ENV
echo "CFLAGS=-g -fdata-sections -ffunction-sections -I$(pwd)/sysroot/usr/local/include -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
echo "CXXFLAGS=-g -fdata-sections -ffunction-sections -I$(pwd)/sysroot/usr/local/include -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
echo "LDFLAGS=-g -Wl,--gc-sections -fdata-sections -ffunction-sections -I$(pwd)/sysroot/usr/local/include -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
echo "DESTDIR=$(pwd)/sysroot" >> $GITHUB_ENV
echo "PREFIX=/usr/local" >> $GITHUB_ENV
echo "CONFIGURE_ARGS=--build=x86_64-linux-gnu --host=${{ matrix.triple }} --prefix=/usr/local --disable-shared --enable-static" >> $GITHUB_ENV
echo "CROSS_COMPILE=${{ matrix.triple }}-" >> $GITHUB_ENV
mkdir -p $(pwd)/sysroot/usr/local/lib
ln -sf $(pwd)/sysroot/usr/local/lib{,64}
- name: Download dependencies (embedded binaries)
run: |
cd src
curl -LOOO https://cdn.nickchan.lol/palera1n/c-rewrite/deps/checkra1n-kpf-pongo \
https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg \
https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg
cd ..
make -j5 download-checkra1n
- name: Download dependencies (source code)
run: |
curl -LOOO \
https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${{ env.MBEDTLS_VERSION }}.tar.gz \
https://github.com/libusb/libusb/releases/download/v${{ env.LIBUSB_VERSION }}/libusb-${{ env.LIBUSB_VERSION }}.tar.bz2 \
https://mirror-hk.koddos.net/gnu/readline/readline-${{ env.READLINE_VERSION }}.tar.gz \
https://mirror-hk.koddos.net/gnu/ncurses/ncurses-${{ env.NCURSES_VERSION }}.tar.gz
tar -xf v${{ env.MBEDTLS_VERSION }}.tar.gz
tar -xjf libusb-${{ env.LIBUSB_VERSION }}.tar.bz2
tar -xf readline-${{ env.READLINE_VERSION }}.tar.gz
tar -xf ncurses-${{ env.NCURSES_VERSION }}.tar.gz
git clone --depth=1 https://github.com/libimobiledevice/libplist
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice-glue
git clone --depth=1 https://github.com/libimobiledevice/libirecovery
git clone --depth=1 https://github.com/libimobiledevice/libusbmuxd
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice
- name: Build ncurses
run: |
cd ncurses-${{ env.NCURSES_VERSION }}
./configure \
--with-build-cc="cc" \
--with-build-cflags=" " \
--with-build-cpp="cc -E" \
--with-build-cppflags=" " \
--with-build-ldflags=" " \
--with-pthread \
--disable-overwrite \
--without-debug \
--without-tests \
--enable-sigwinch \
--enable-const \
--enable-symlinks \
--enable-termcap \
--enable-pc-files \
--without-x11-rgb \
--with-pkg-config-libdir="${{ env.PREFIX }}/lib/pkgconfig" \
--enable-widec \
--with-default-terminfo-dir="/usr/share/terminfo" \
--with-terminfo-dirs="/usr/share/terminfo:/lib/terminfo:/usr/lib/terminfo:/usr/local/share/terminfo:/usr/local/lib/terminfo:/data/data/com.termux/files/usr/share/terminfo" \
LDFLAGS="${{ env.LDFLAGS }}" \
PKG_CONFIG_LIBDIR="${{ env.PREFIX }}/lib/pkgconfig"
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build Mbed TLS
run: |
cd mbedtls-${{ env.MBEDTLS_VERSION }}
cat ../patches/0001-Allow-empty-x509-cert-issuer.patch | patch -sN -d . -p1
mkdir build
cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CROSSCOMPILING=true \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=$(echo ${{ matrix.triple }} | cut -d- -f1) \
-DCMAKE_C_COMPILER='${{ env.CROSS_COMPILE }}gcc' \
-DCMAKE_C_FLAGS='${{ env.CFLAGS }}' \
-DCMAKE_CXX_FLAGS='${{ env.CXXFLAGS }}' \
-DCMAKE_FIND_ROOT_PATH="${{ env.DESTDIR }}" \
-DCMAKE_INSTALL_PREFIX="${{ env.PREFIX }}" \
-DENABLE_TESTING=OFF \
-DENABLE_PROGRAMS=OFF \
-DCMAKE_INSTALL_SYSCONFDIR="/etc"
make -j$(nproc)
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libusb
run: |
cd libusb-${{ env.LIBUSB_VERSION }}
./configure ${{ env.CONFIGURE_ARGS }} --disable-udev
make -j$(nproc)
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build readline
run: |
cd readline-${{ env.READLINE_VERSION }}
./configure ${{ env.CONFIGURE_ARGS }}
make -j$(nproc)
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libplist
run: |
cd libplist
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --without-cython
make -j$(nproc)
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libimobiledevice-glue
run: |
cd libimobiledevice-glue
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }}
make -j$(nproc)
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libirecovery (sorta)
run: |
sudo mv /usr/local /usr/local.bak
sudo ln -s ${{ env.DESTDIR }}${{ env.PREFIX }} /usr/local
cd libirecovery
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }}
echo -e 'all:\ninstall:' > tools/Makefile
make -ij$(nproc)
make -ij$(nproc) install DESTDIR=${{ env.DESTDIR }}
install -m644 src/.libs/libirecovery-1.0.a ${{ env.DESTDIR }}${{ env.PREFIX }}/lib
cd ..
- name: Build libusbmuxd
run: |
cd libusbmuxd
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }}
make -j$(nproc)
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libimobiledevice
run: |
cd libimobiledevice
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --with-mbedtls --enable-debug
echo -e 'all:\ninstall:' > tools/Makefile
make -j$(nproc)
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
cd ..
sudo rm /usr/local
sudo mv /usr/local.bak /usr/local
- name: Build palera1n
run: |
cp -a sysroot/${{ env.PREFIX }}/{include,lib} dep_root
find dep_root -name '*.so' -delete
find dep_root -name '*.la' -delete
make -j$(nproc) CC="${{ matrix.triple }}-gcc" palera1n
- name: Seperate debug symbols
run: |
${{ matrix.triple }}-objcopy --only-keep-debug src/palera1n palera1n.debug
${{ matrix.triple }}-strip --strip-debug --strip-unneeded src/palera1n
${{ matrix.triple }}-objcopy --add-gnu-debuglink=palera1n.debug src/palera1n
chmod -x palera1n.debug
- name: Prepare artifact
run: |
mkdir ready
mv palera1n.debug ready/palera1n-${{ env.CHECKRA1N_NAME }}.debug
mv src/palera1n ready/palera1n-${{ env.CHECKRA1N_NAME }}
tar -zcf ready/dep_root_${{ matrix.triple }}.tgz dep_root
- name: Upload artifact
uses: wangyucode/[email protected]
with:
host: ${{ secrets.NICKCHAN_FTP_HOST }}
port: ${{ secrets.NICKCHAN_FTP_PORT }}
username: palera1n
privateKey: ${{ secrets.NICKCHAN_FTP_KEY }}
forceUpload: true
dryRun: false
localDir: 'ready/'
remoteDir: '/palera1n/artifacts/c-rewrite'
- name: Upload artifact
uses: wangyucode/[email protected]
with:
host: ${{ secrets.MINEEK_FTP_HOST }}
port: 22
username: mineekfiles
password: ${{ secrets.MINEEK_FTP_PASS }}
forceUpload: true
dryRun: false
localDir: 'ready/'
remoteDir: '/uploads/palera1n/artifacts/palera1n-c'