name: Build palera1n on: push: paths: - 'src/**' - 'docs/**' - 'patches/**' - 'include/**' - 'Makefile' - 'CMakeLists.txt' - '.github/workflows/build.yml' pull_request: workflow_dispatch: jobs: build-docs: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Install dependencies (packages) run: | sudo apt-get -y update sudo apt-get -y install mandoc make - name: Build Documentation run: | make -j$(nproc) docs mkdir ready cp docs/*.html docs/mandoc.css docs/palera1n.1 ready - name: Upload artifact if: ${{ github.event_name != 'pull_request' }} uses: wangyucode/sftp-upload-action@v1.4.8 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' build-loader: runs-on: macos-12 steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Get loader commit run: echo "LOADER_COMMIT=$(git -C src/loader rev-parse HEAD)" >> $GITHUB_ENV - name: Cache compile id: loader_cache uses: actions/cache@v3 with: path: src/loader/packages key: loader-${{ env.LOADER_COMMIT }} - name: Install dependencies (packages) if: steps.loader_cache.outputs.cache-hit != 'true' run: | 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: Compile if: steps.loader_cache.outputs.cache-hit != 'true' run: make -C src/loader - name: Upload loader uses: actions/upload-artifact@v3 with: name: palera1n.ipa path: src/loader/packages/palera1n.ipa retention-days: 1 build-binpack: needs: build-loader runs-on: macos-12 steps: - name: Cache Procursus uses: actions/cache@v3 id: procache with: path: | ~/__cache key: ${{ runner.os }}-procursus - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Get binpack commit run: echo "BINPACK_COMMIT=$(git -C src/binpack rev-parse HEAD)" >> $GITHUB_ENV - name: Cache binpack.tgz uses: actions/cache@v3 id: binpack_cache with: path: src/jbinit/binpack.tgz key: binpack-${{ env.BINPACK_COMMIT }} - name: Download loader uses: actions/download-artifact@v3 with: name: palera1n.ipa path: src/jbinit/palera1n.ipa - name: Checkout Procursus if: steps.binpack_cache.outputs.cache-hit != 'true' uses: actions/checkout@v3 with: repository: ProcursusTeam/Procursus path: src/Procursus - name: Setup Procursus Bootstrap (install) if: steps.procache.outputs.cache-hit != 'true' && steps.binpack_cache.outputs.cache-hit != 'true' run: | wget https://apt.procurs.us/bootstraps/big_sur/bootstrap-darwin-amd64.tar.zst sudo gtar --preserve-permissions -xkf ./bootstrap-darwin-amd64.tar.zst -C / echo '/opt/procursus/sbin:/opt/procursus/bin' >> $GITHUB_PATH PATH=/opt/procursus/sbin:/opt/procursus/bin:$PATH sudo /opt/procursus/bin/apt update sudo /opt/procursus/bin/apt -V full-upgrade -y || : sudo /opt/procursus/bin/apt install asciidoc autoconf autoconf-archive automake autopoint bash bison cmake docbook-xml docbook-xsl fakeroot findutils flex file gawk git gnupg gpgrt-tools groff gzip ldid libtool libltdl-dev llvm make ncurses-bin openssl patch pkg-config po4a python3 sed tar triehash wget xz-utils zstd -y - name: Add Procursus to PATH if: steps.binpack_cache.outputs.cache-hit != 'true' run: | echo '/opt/procursus/sbin:/opt/procursus/bin' >> $GITHUB_PATH - name: Setup Procursus Bootstrap (cache) if: steps.procache.outputs.cache-hit == 'true' && steps.binpack_cache.outputs.cache-hit != 'true' run: | sudo mkdir -p ~/__cache/procursus/var/cache/apt/archives/partial ~/__cache/procursus/var/lib/apt/lists/partial sudo rsync -aP ~/__cache/procursus /opt sudo /opt/procursus/bin/apt update sudo /opt/procursus/bin/apt --allow-downgrades -V dist-upgrade -y sudo /opt/procursus/bin/apt --allow-downgrades -V dist-upgrade -y - name: Build binpack if: steps.binpack_cache.outputs.cache-hit != 'true' run: | cd src/binpack gmake MEMO_CFVER=1800 MEMO_PREFIX=/cores/binpack MEMO_TARGET=iphoneos-arm64 binpack cd ../.. - name: Process binpack.tar into binpack.tgz if: steps.binpack_cache.outputs.cache-hit != 'true' run: | cd src/jbinit cp ../binpack/build_strap/iphoneos-arm64/1800/binpack.tar . sudo tar --preserve-permissions -xf binpack.tar sudo cp -R cores/binpack . sudo chown $UID:$GID . sudo mkdir -p binpack/Library/LaunchDaemons sudo sed 's|/binpack|/cores/binpack|' binpack/usr/share/dropbear.plist.example | sudo tee binpack/Library/LaunchDaemons/dropbear.plist sudo rm -rf binpack/usr/share/dropbear.plist.example sudo plutil -convert binary1 binpack/Library/LaunchDaemons/dropbear.plist sudo chown 0:0 binpack/Library/LaunchDaemons/dropbear.plist sudo gchmod 755 -R binpack/Library sudo gchmod 644 binpack/Library/LaunchDaemons/dropbear.plist tar -zcf binpack.tgz binpack cd ../.. - name: Generate binpack.dmg run: | cd src/jbinit sudo gmake binpack.dmg cd ../.. - name: Upload binpack uses: actions/upload-artifact@v3 with: name: binpack.dmg path: src/jbinit/binpack.dmg retention-days: 1 - name: Copy Procursus to Cache Location run: | sudo mkdir -p ~/__cache sudo rsync -aP /opt/procursus ~/__cache sudo rm -rf ~/__cache/procursus/var/cache/apt/archives/partial ~/__cache/procursus/var/lib/apt/lists/partial ~/__cache/procursus/Library/dpkg/triggers/Lock build-jbinit: runs-on: macos-12 steps: - name: Checkout uses: actions/checkout@v3 with: submodules: recursive - name: Get jbinit commit run: echo "JBINIT_COMMIT=$(git -C src/jbinit rev-parse HEAD)" >> $GITHUB_ENV - name: Cache jbinit uses: actions/cache@v3 id: jbinit_cache with: path: src/jbinit/ramdisk.dmg key: jbinit-${{ env.JBINIT_COMMIT }} - name: Download dependencies if: steps.jbinit_cache.cache_hit != 'true' run: | brew install make coreutils 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: Build jbinit if: steps.jbinit_cache.cache_hit != 'true' run: | cd src/jbinit git submodule update --init --recursive sudo cp -a $(xcrun -sdk macosx --show-sdk-path)/usr/include/{xpc,{launch,bootstrap}.h} $(xcrun -sdk iphoneos --show-sdk-path)/usr/include sudo sed -i.bak -Ee 's/API_UNAVAILABLE\(.*\)//g' $(xcrun -sdk iphoneos --show-sdk-path)//System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h sudo sed -i.bak -e 's/;}/;/g' $(xcrun -sdk iphoneos --show-sdk-path)//System/Library/Frameworks/CoreFoundation.framework/Headers/CFUserNotification.h sudo sed -i.bak -e 's/__UNAVAILABLE_PUBLIC_IOS;/;/g' $(xcrun -sdk iphoneos --show-sdk-path)/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h ruby -e "File.write(ARGV[0], File.read(ARGV[0]).gsub(ARGV[1]) { ARGV[2] })" $(xcrun -sdk iphoneos --show-sdk-path)/System/Library/Frameworks/IOKit.framework/Headers/IOKitLib.h '__API_DEPRECATED_WITH_REPLACEMENT("kIOMainPortDefault", macos(10.0, 12.0)) __API_UNAVAILABLE(ios, watchos, tvos);' '__API_DEPRECATED_WITH_REPLACEMENT("kIOMainPortDefault", macos(10.0, 12.0)) /*__API_UNAVAILABLE(ios, watchos, tvos)*/;' sudo chown $UID:$GID . sudo gmake -j$(sysctl -n hw.ncpu) ramdisk.dmg - name: Upload ramdisk uses: actions/upload-artifact@v3 with: name: ramdisk.dmg path: src/jbinit/ramdisk.dmg retention-days: 1 build-kpf: runs-on: ubuntu-20.04 steps: - name: Install toolchain run: | echo 'deb https://assets.checkra.in/debian /' | sudo tee /etc/apt/sources.list.d/checkra1n.list sudo apt-key adv --fetch-keys https://assets.checkra.in/debian/archive.key sudo apt-get update sudo apt-get install -y ld64 cctools-strip - name: Checkout repository uses: actions/checkout@v2 with: fetch-depth: 0 submodules: true - name: Get Pongo commit run: echo "PONGO_COMMIT=$(git -C src/PongoOS rev-parse HEAD)" >> $GITHUB_ENV - name: Voodoo magic id: voodoo uses: actions/cache@v2 with: key: ${{ github.event_name }}-${{ env.PONGO_COMMIT }}-${{ github.run_id }} restore-keys: | pongo-${{ env.PONGO_COMMIT }}- pongo- path: | src/PongoOS/** - name: Compile run: | cd src/PongoOS EMBEDDED_CC='clang-10' EMBEDDED_AR='llvm-ar-10' EMBEDDED_RANLIB='llvm-ranlib-10' DEV_BUILD=1 make build/checkra1n-kpf-pongo - name: Upload checkra1n-kpf-pongo uses: actions/upload-artifact@v3 with: name: checkra1n-kpf-pongo path: src/PongoOS/build/checkra1n-kpf-pongo retention-days: 1 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: 7.0 runs-on: macos-12 needs: [build-loader, build-jbinit, build-binpack, build-kpf] env: MBEDTLS_VERSION: 3.3.0 READLINE_VERSION: 8.2 SLANG_VERSION: 2.3.3 NEWT_VERSION: 0.52.23 POPT_VERSION: 1.19 steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install dependencies (packages) run: | sudo /usr/local/bin/pip3 install jsonschema jinja2 brew install make autoconf automake pkg-config gnu-sed gettext 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: | echo "SDK=$(xcrun -sdk ${{ matrix.os }} --show-sdk-path)" >> $GITHUB_ENV - name: Download binpack.dmg uses: actions/download-artifact@v3 with: name: binpack.dmg path: src/palera1n/binpack.dmg - name: Download ramdisk.dmg uses: actions/download-artifact@v3 with: name: ramdisk.dmg path: src/palera1n/ramdisk.dmg - name: Download checkra1n-kpf-pongo uses: actions/download-artifact@v3 with: name: checkra1n-kpf-pongo path: src/palera1n/checkra1n-kpf-pongo - name: Download dependencies (source code) run: | curl -LOOOOOO \ https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${{ env.MBEDTLS_VERSION }}.tar.gz \ https://mirror-hk.koddos.net/gnu/readline/readline-${{ env.READLINE_VERSION }}.tar.gz \ https://www.jedsoft.org/releases/slang/slang-${{ env.SLANG_VERSION }}.tar.bz2 \ https://releases.pagure.org/newt/newt-${{ env.NEWT_VERSION }}.tar.gz \ https://github.com/rpm-software-management/popt/archive/refs/tags/popt-${{ env.POPT_VERSION }}-release.tar.gz tar -xf v${{ env.MBEDTLS_VERSION }}.tar.gz tar -xf readline-${{ env.READLINE_VERSION }}.tar.gz tar -xjf slang-${{ env.SLANG_VERSION }}.tar.bz2 tar -xf newt-${{ env.NEWT_VERSION }}.tar.gz tar -xf popt-${{ env.POPT_VERSION }}-release.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: Select correct Xcode run: | sudo xcode-select -s /Applications/Xcode_14.2.app - 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 "CPP=$(xcrun --find cc) -E" >> $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 -Os" >> $GITHUB_ENV echo "CPPFLAGS=-g -Os -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Wno-error-implicit-function-declaration -Os" >> $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 -Os" >> $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 echo "CFLAGS_FOR_BUILD=-arch $(uname -m) -isysroot $(xcrun -sdk macosx --show-sdk-path) -Os" >> $GITHUB_ENV echo "CXXFLAGS_FOR_BUILD=-stdlib=libc++ -arch $(uname -m) -isysroot $(xcrun -sdk macosx --show-sdk-path) -Os" >> $GITHUB_ENV echo "CPPFLAGS_FOR_BUILD=-arch $(uname -m) -isysroot $(xcrun -sdk macosx --show-sdk-path) -Wno-error-implicit-function-declaration -Os" >> $GITHUB_ENV echo "LDFLAGS_FOR_BUILD=-Wl,-dead_strip" >> $GITHUB_ENV mkdir -p $(pwd)/sysroot/usr/local/lib ln -sf $(pwd)/sysroot/usr/local/lib{,64} - name: Prepare iPhoneOS environment if: matrix.os == 'iphoneos' run: | echo "FAKE_PLATFORM=2" >> $GITHUB_ENV echo "FAKE_SDK=7.0" >> $GITHUB_ENV echo "FAKE_MINOS=7.0" >> $GITHUB_ENV - 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 Mbed TLS run: | cd mbedtls-${{ env.MBEDTLS_VERSION }} cat ../patches/mbedtls/0001-Allow-empty-x509-cert-issuer.patch | patch -sN -d . -p1 mkdir build cd build SDKROOT="${{ env.SDK }}" 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) \ SDKROOT="${{ env.SDK }}" 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 S-Lang run: | cd slang-${{ env.SLANG_VERSION }} ./configure \ ${{ env.CONFIGURE_ARGS }} \ --without-x \ --without-pcre \ --without-onig \ --without-z \ --without-png \ --without-iconv gmake -j$(sysctl -n hw.ncpu) static gmake -j$(sysctl -n hw.ncpu) install-static DESTDIR=${{ env.DESTDIR }} cd .. - name: Build popt run: | cd popt-popt-${{ env.POPT_VERSION }}-release autoreconf -fiv ./configure \ ${{ env.CONFIGURE_ARGS }} \ --without-libiconv-prefix \ --without-libintl-prefix \ --disable-nls \ --disable-werror gmake -j$(sysctl -n hw.ncpu) gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }} cd .. - name: Build newt run: | cd newt-${{ env.NEWT_VERSION }} ./configure \ ${{ env.CONFIGURE_ARGS }} \ --with-readline=gnu \ --without-python \ --without-tcl \ --disable-nls gmake -j$(sysctl -n hw.ncpu) libnewt.a mkdir -p ${{ env.DESTDIR }}/usr/local/{lib/pkgconfig,include} install -m644 libnewt.pc ${{ env.DESTDIR }}/usr/local/lib/pkgconfig install -m644 libnewt.a ${{ env.DESTDIR }}/usr/local/lib install -m644 newt.h ${{ env.DESTDIR }}/usr/local/include 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 gsed -i '/case kIOUSBTransactionTimeout/d' src/libirecovery.c fi ./configure ${{ env.CONFIGURE_ARGS }} 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 find dep_root -name '*.dylib' -delete find dep_root -name '*.la' -delete gmake -j$(sysctl -n hw.ncpu) mkdir -p ready mv src/palera1n palera1n-${{ matrix.os }}-${{ matrix.arch }} dsymutil palera1n-${{ matrix.os }}-${{ matrix.arch }} strip palera1n-${{ matrix.os }}-${{ matrix.arch }} if [ "${{ matrix.os }}" == "macosx" ]; then ldid -S palera1n-${{ matrix.os }}-${{ matrix.arch }} else ldid -Ssrc/usb.xml palera1n-${{ matrix.os }}-${{ matrix.arch }} fi mkdir -p ready tar -zcf ready/dep_root-${{ matrix.os }}-${{ matrix.arch }}.tgz dep_root - name: Upload artifact if: ${{ github.event_name != 'pull_request' }} uses: wangyucode/sftp-upload-action@v1.4.8 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 ${{ matrix.os }} thin ${{ matrix.arch }} build if: ${{ github.event_name != 'pull_request' }} 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 if: ${{ github.event_name != 'pull_request' }} 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: if: ${{ github.event_name != 'pull_request' }} 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 if: ${{ github.event_name != 'pull_request' }} uses: wangyucode/sftp-upload-action@v1.4.8 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' build-Linux: strategy: matrix: triple: - i486-linux-musl - x86_64-linux-musl - armel-linux-musleabi - aarch64-linux-musl runs-on: ubuntu-latest needs: [build-loader, build-jbinit, build-binpack, build-kpf] env: MBEDTLS_VERSION: 3.3.0 LIBUSB_VERSION: 1.0.26 READLINE_VERSION: 8.2 SLANG_VERSION: 2.3.3 NEWT_VERSION: 0.52.23 GPM_VERSION: 1.20.7 POPT_VERSION: 1.19 steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install build dependencies (packages) run: | sudo apt-get remove -y libssl-dev libreadline-dev sudo apt-get install -y pkg-config autoconf automake autopoint 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: Download binpack.dmg uses: actions/download-artifact@v3 with: name: binpack.dmg path: src/palera1n/binpack.dmg - name: Download ramdisk.dmg uses: actions/download-artifact@v3 with: name: ramdisk.dmg path: src/palera1n/ramdisk.dmg - name: Download checkra1n-kpf-pongo uses: actions/download-artifact@v3 with: name: checkra1n-kpf-pongo path: src/palera1n/checkra1n-kpf-pongo - 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 "INSTALL=$(command -v install) --strip-program=${{ matrix.triple }}-strip" >> $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 (source code) run: | curl -LOOOOOOO \ 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://www.jedsoft.org/releases/slang/slang-${{ env.SLANG_VERSION }}.tar.bz2 \ https://releases.pagure.org/newt/newt-${{ env.NEWT_VERSION }}.tar.gz \ https://github.com/telmich/gpm/archive/refs/tags/${{ env.GPM_VERSION }}.tar.gz \ https://github.com/rpm-software-management/popt/archive/refs/tags/popt-${{ env.POPT_VERSION }}-release.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 -xjf slang-${{ env.SLANG_VERSION }}.tar.bz2 tar -xf newt-${{ env.NEWT_VERSION }}.tar.gz tar -xf ${{ env.GPM_VERSION }}.tar.gz tar -xf popt-${{ env.POPT_VERSION }}-release.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 Mbed TLS run: | cd mbedtls-${{ env.MBEDTLS_VERSION }} cat ../patches/mbedtls/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 S-Lang run: | cd slang-${{ env.SLANG_VERSION }} ./configure \ ${{ env.CONFIGURE_ARGS }} \ --without-x \ --without-pcre \ --without-onig \ --without-z \ --without-png \ --without-iconv gmake -j$(sysctl -n hw.ncpu) static gmake -j$(sysctl -n hw.ncpu) install-static DESTDIR=${{ env.DESTDIR }} cd .. - name: Build GPM run: | cd gpm-${{ env.GPM_VERSION }} cat ../patches/gpm/*.patch | patch -sN -d . -p1 ./autogen.sh ./configure \ ${{ env.CONFIGURE_ARGS }} gmake -j$(sysctl -n hw.ncpu) gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }} cd .. - name: Build popt run: | cd popt-popt-${{ env.POPT_VERSION }}-release autoreconf -fiv ./configure \ ${{ env.CONFIGURE_ARGS }} \ --without-libiconv-prefix \ --without-libintl-prefix \ --disable-nls \ --disable-werror gmake -j$(sysctl -n hw.ncpu) gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }} cd .. - name: Build newt run: | cd newt-${{ env.NEWT_VERSION }} ./configure \ ${{ env.CONFIGURE_ARGS }} \ --with-readline=gnu \ --without-python \ --without-tcl \ --disable-nls \ --with-gpm-support gmake -j$(sysctl -n hw.ncpu) libnewt.a mkdir -p ${{ env.DESTDIR }}/usr/local/{lib/pkgconfig,include} install -m644 libnewt.pc ${{ env.DESTDIR }}/usr/local/lib/pkgconfig install -m644 libnewt.a ${{ env.DESTDIR }}/usr/local/lib install -m644 newt.h ${{ env.DESTDIR }}/usr/local/include 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 CC="${{ matrix.triple }}-gcc" make -j$(nproc) - 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 if: ${{ github.event_name != 'pull_request' }} uses: wangyucode/sftp-upload-action@v1.4.8 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' delete-artifacts: runs-on: ubuntu-latest needs: [darwin-dist, build-Linux] steps: - name: Delete all artifacts on GitHub uses: geekyeggo/delete-artifact@v2 with: name: '*' failOnError: false