Files
palera1n/.github/workflows/build.yml
T
2023-01-27 22:06:43 +08:00

243 lines
8.8 KiB
YAML

name: Build palera1n
on:
push:
pull_request:
workflow_dispatch:
jobs:
build-macOS:
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download dependencies
run: |
cd src
curl -LOOO https://github.com/guacaplushy/checkp4le/raw/main/binaries/checkra1n-kpf-pongo \
https://cdn.nickchan.lol/palera1n/c-rewrite/deps/binpack.dmg \
https://cdn.nickchan.lol/palera1n/c-rewrite/deps/ramdisk.dmg
cd ..
curl -LO https://cdn.nickchan.lol/palera1n/c-rewrite/deps/dep_root_macos.tgz
tar xf dep_root_macos.tgz
make -j5 download-checkra1n
- name: Build
run: |
make -j$(sysctl -n hw.ncpu) macos-dist
- name: Prepare artifact
run: |
mkdir ready
cp palera1n-macos ready/palera1n-macos-universal
cp palera1n-x86_64 ready/palera1n-macos-x86_64
cp palera1n-arm64 ready/palera1n-macos-arm64
zip -r 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'
build-Linux:
strategy:
matrix:
triple:
- i486-linux-musl
- x86_64-linux-musl
- armel-linux-musleabi
- aarch64-linux-musl
runs-on: ubuntu-latest
env:
OSSL_VERSION: 3.0.7
LIBUSB_VERSION: 1.0.26
READLINE_VERSION: 8.2
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
- name: Download toolchain
run: |
curl -LO https://musl.cc/${{ matrix.triple }}-cross.tgz
tar -xf ${{ matrix.triple }}-cross.tgz
- name: Setup environment
run: |
mkdir sysroot
echo "$(pwd)/${{ matrix.triple }}-cross/bin" >> $GITHUB_PATH
case ${{ matrix.triple }} in
i486-linux-musl)
echo "CHECKRA1N_NAME=linux-x86" >> $GITHUB_ENV
echo "OSSL_ARCH=linux-x86" >> $GITHUB_ENV
;;
x86_64-linux-musl)
echo "CHECKRA1N_NAME=linux-x86_64" >> $GITHUB_ENV
echo "OSSL_ARCH=linux-x86_64" >> $GITHUB_ENV
;;
armel-linux-musleabi)
echo "CHECKRA1N_NAME=linux-armel" >> $GITHUB_ENV
echo "OSSL_ARCH=linux-armv4" >> $GITHUB_ENV
;;
aarch64-linux-musl)
echo "CHECKRA1N_NAME=linux-arm64" >> $GITHUB_ENV
echo "OSSL_ARCH=linux-aarch64" >> $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://github.com/guacaplushy/checkp4le/raw/main/binaries/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://www.openssl.org/source/openssl-${{ env.OSSL_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
tar -xf openssl-${{ env.OSSL_VERSION }}.tar.gz
tar -xjf libusb-${{ env.LIBUSB_VERSION }}.tar.bz2
tar -xf readline-${{ env.READLINE_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 OpenSSL
run: |
cd openssl-${{ env.OSSL_VERSION }}
LDFLAGS="${{ env.LDFLAGS }} -latomic" ./Configure ${{ env.OSSL_ARCH }}
sed -i 's/-m64//g' Makefile
make -j$(nproc) LDFLAGS="${{ env.LDFLAGS }} -latomic"
make install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libusb
run: |
cd libusb-${{ env.LIBUSB_VERSION }}
./configure ${{ env.CONFIGURE_ARGS }} --disable-udev
make -j$(nproc)
make install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build readline
run: |
cd readline-${{ env.READLINE_VERSION }}
./configure ${{ env.CONFIGURE_ARGS }}
make -j$(nproc)
make install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libplist
run: |
cd libplist
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --without-cython
make -j$(nproc)
make install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libimobiledevice-glue
run: |
cd libimobiledevice-glue
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }}
make -j$(nproc)
make 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 }}
make -ij$(nproc)
make -i 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 install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build libimobiledevice
run: |
cd libimobiledevice
autoreconf -fiv
./configure ${{ env.CONFIGURE_ARGS }} --with-openssl openssl_LIBS="-lssl -lcrypto" openssl_CFLAGS=" "
make -j$(nproc)
make 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 }}
- 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'