diff --git a/.github/scripts/build.sh b/.github/scripts/build.sh new file mode 100755 index 0000000..267f120 --- /dev/null +++ b/.github/scripts/build.sh @@ -0,0 +1,92 @@ +#!/bin/bash + +ROOT_DIR="$(pwd)" +FFMPEG_VERSION="6.0" +NUM_JOBS="4" + +if [ $# -eq 1 ]; then + PACKAGE_NAME="$1" + FFMPEG_OPTIONS="" + PSXAVENC_OPTIONS="" +elif [ $# -eq 3 ]; then + PACKAGE_NAME="$1" + FFMPEG_OPTIONS="--arch=x86 --target-os=mingw32 --cross-prefix=$2-" + PSXAVENC_OPTIONS="--cross-file $3" +else + echo "Usage: $0 [cross prefix] [cross file]" + exit 0 +fi + +## Download FFmpeg + +if [ ! -d ffmpeg-$FFMPEG_VERSION ]; then + wget "https://ffmpeg.org/releases/ffmpeg-$FFMPEG_VERSION.tar.xz" \ + || exit 1 + tar Jxf ffmpeg-$FFMPEG_VERSION.tar.xz \ + || exit 1 + + rm -f ffmpeg-$FFMPEG_VERSION.tar.xz +fi + +## Build FFmpeg + +mkdir -p ffmpeg-build +cd ffmpeg-build + +../ffmpeg-$FFMPEG_VERSION/configure \ + --prefix="$ROOT_DIR/ffmpeg-dist" \ + $FFMPEG_OPTIONS \ + --enable-gpl \ + --enable-version3 \ + --enable-static \ + --disable-shared \ + --enable-small \ + --disable-programs \ + --disable-doc \ + --disable-avdevice \ + --disable-postproc \ + --disable-avfilter \ + --disable-network \ + --disable-encoders \ + --disable-hwaccels \ + --disable-muxers \ + --disable-bsfs \ + --disable-devices \ + --disable-filters \ + --disable-mmx \ + || exit 2 +make -j $NUM_JOBS \ + || exit 2 +make install \ + || exit 2 + +cd .. +rm -rf ffmpeg-build + +## Build psxavenc + +meson setup \ + --buildtype release \ + --strip \ + --prefix $ROOT_DIR/psxavenc-dist \ + --pkg-config-path $ROOT_DIR/ffmpeg-dist/lib/pkgconfig \ + $PSXAVENC_OPTIONS \ + psxavenc-build \ + psxavenc \ + || exit 3 +meson compile -C psxavenc-build \ + || exit 3 +meson install -C psxavenc-build \ + || exit 3 + +rm -rf ffmpeg-dist psxavenc-build + +## Package psxavenc + +cd psxavenc-dist + +zip -9 -r ../$PACKAGE_NAME.zip . \ + || exit 4 + +cd .. +rm -rf psxavenc-dist diff --git a/.github/scripts/mingw-cross.txt b/.github/scripts/mingw-cross.txt new file mode 100644 index 0000000..e3121de --- /dev/null +++ b/.github/scripts/mingw-cross.txt @@ -0,0 +1,12 @@ +[binaries] +c = 'x86_64-w64-mingw32-gcc' +cpp = 'x86_64-w64-mingw32-g++' +ar = 'x86_64-w64-mingw32-ar' +strip = 'x86_64-w64-mingw32-strip' +pkgconfig = 'pkg-config' + +[host_machine] +system = 'windows' +cpu_family = 'x86_64' +cpu = 'x86_64' +endian = 'little' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..43f5f1a --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,44 @@ + +name: Build psxavenc +on: [ push, pull_request ] + +jobs: + build: + name: Build and create release + runs-on: ubuntu-latest + + steps: + - name: Install prerequisites + run: | + sudo apt-get update -y + sudo apt-get install -y --no-install-recommends meson ninja-build gcc-mingw-w64-x86-64 + + - name: Fetch repo contents + uses: actions/checkout@v3 + with: + path: psxavenc + + - name: Build psxavenc for Windows + run: | + psxavenc/.github/scripts/build.sh psxavenc-windows x86_64-w64-mingw32 psxavenc/.github/scripts/mingw-cross.txt + + - name: Build psxavenc for Linux + run: | + psxavenc/.github/scripts/build.sh psxavenc-linux + + - name: Upload build artifacts + uses: actions/upload-artifact@v3 + with: + name: psxavenc-windows + path: | + psxavenc-windows.zip + psxavenc-linux.zip + + - name: Publish release + if: ${{ github.ref_type == 'tag' }} + uses: softprops/action-gh-release@v1 + with: + #fail_on_unmatched_files: true + files: | + psxavenc-windows.zip + psxavenc-linux.zip