diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b78c1cdf..11f76e63 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -16,109 +16,190 @@ jobs: - name: Install dependencies id: set-matrix run: | - echo "dependant=$(node create-matrix.js dependant)" >> $GITHUB_OUTPUT - echo "non_dependant=$(node create-matrix.js non_dependant)" >> $GITHUB_OUTPUT + echo "matrix<> $GITHUB_OUTPUT + node create-matrix.js >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + TAG=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9._-]/-/g') + echo "tag=$TAG" >> $GITHUB_OUTPUT + outputs: - dependant: ${{ steps.set-matrix.outputs.dependant }} - non_dependant: ${{ steps.set-matrix.outputs.non_dependant }} + matrix: ${{ steps.set-matrix.outputs.matrix }} + tag: ${{ steps.set-matrix.outputs.tag }} + + prepare_docker: + runs-on: ubuntu-latest + needs: prepare_jobs + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v6 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v4 + - name: Log in to GHCR + uses: docker/login-action@v4 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@v7 + with: + context: . + push: true + tags: ghcr.io/${{ github.repository }}/vitasdk:${{ needs.prepare_jobs.outputs.tag }} + cache-from: type=gha + cache-to: type=gha,mode=max + build-args: | + VITASDK_CACHE_BUST=${{ github.run_id }}-${{ github.run_attempt }} + + build_tier0_main: + needs: [prepare_jobs, prepare_docker] - build: - needs: [prepare_jobs] - runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: - package: ${{ fromJson(needs.prepare_jobs.outputs.non_dependant) }} - env: - SSHPASS: ${{ secrets.SSHPASS }} - TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@v6 - - name: Install dependencies - run: | - : # libarchive-tools provides bsdtar - : # libtool-bin is required to build libtremor - : # xutils-dev is required to build openssl - sudo apt-get update - sudo apt-get install libarchive-tools libtool-bin xutils-dev - - name: Prepare Build - run: | - bash ./prepare.sh - - name: Build package - run: | - export VITASDK=/usr/local/vitasdk - export PATH=$VITASDK/bin:$PATH - bash ./build.sh ${{ matrix.package }} - - name: Rename package - run: | - export FILE=`echo ${{ matrix.package }}/*-arm.tar.xz` - mv $FILE ${{ matrix.package }}/${{ matrix.package }}.tar.xz - - uses: actions/upload-artifact@v6 - with: - name: ${{ matrix.package }} - path: ${{ matrix.package }}/${{ matrix.package }}.tar.xz - if-no-files-found: error - build_depends: - needs: [prepare_jobs, build] - runs-on: ubuntu-22.04 + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier0_main }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + secrets: inherit + + build_tier0_slow: + needs: [prepare_jobs, prepare_docker] + strategy: fail-fast: false matrix: - package: ${{ fromJson(needs.prepare_jobs.outputs.dependant) }} + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier0_slow }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + secrets: inherit + + build_tier1_main: + needs: [prepare_jobs, prepare_docker, build_tier0_main] + + + strategy: + fail-fast: false + matrix: + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier1_main }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + secrets: inherit + + build_tier1_slow: + needs: [prepare_jobs, prepare_docker, build_tier0_main, build_tier0_slow] + + + strategy: + fail-fast: false + matrix: + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier1_slow }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + secrets: inherit + + build_tier2_main: + needs: [prepare_jobs, prepare_docker, build_tier1_main] + + + strategy: + fail-fast: false + matrix: + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier2_main }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + secrets: inherit + + build_tier2_slow: + needs: [prepare_jobs, prepare_docker, build_tier1_main, build_tier1_slow] + + + strategy: + fail-fast: false + matrix: + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier2_slow }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + secrets: inherit + + build_tier3_main: + needs: [prepare_jobs, prepare_docker, build_tier2_main] + + + strategy: + fail-fast: false + matrix: + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier3_main }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + secrets: inherit + + build_tier3_slow: + needs: [prepare_jobs, prepare_docker, build_tier2_main, build_tier2_slow] + + + strategy: + fail-fast: false + matrix: + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier3_slow }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + secrets: inherit + + build_tier4_main: + needs: [prepare_jobs, prepare_docker, build_tier3_main] + + + strategy: + fail-fast: false + matrix: + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier4_main }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + + secrets: inherit + + build_tier4_slow: + needs: [prepare_jobs, prepare_docker, build_tier3_main, build_tier3_slow] + + + strategy: + fail-fast: false + matrix: + package: ${{ fromJson(needs.prepare_jobs.outputs.matrix).tier4_slow }} + uses: ./.github/workflows/build_package.yml + with: + package: ${{ matrix.package }} + image_tag: ${{ needs.prepare_jobs.outputs.tag }} + + secrets: inherit - env: - SSHPASS: ${{ secrets.SSHPASS }} - TOKEN: ${{ secrets.GITHUB_TOKEN }} - steps: - - uses: actions/checkout@v6 - - name: Generate actions/download-artifact pattern - id: generate-download-artifact-pattern - run: | - PATTERN=`echo ${{ matrix.package }} | awk 'NF{NF-=1};1' | tr ' ' '|' | awk '{ print "@(" $0 ")" }'` - echo "PATTERN=$PATTERN" >> $GITHUB_OUTPUT - - uses: actions/download-artifact@v7 - with: - path: package - pattern: ${{ steps.generate-download-artifact-pattern.outputs.PATTERN }} - merge-multiple: true - - name: Install dependencies - run: | - : # libarchive-tools provides bsdtar - : # libc6-dev-i386 is required to build luajit - : # python2.7 is required to build cpython - sudo apt-get update - sudo apt-get install libarchive-tools libc6-dev-i386 python2.7 - - uses: actions/setup-python@v6 - with: - python-version: '3.11' - - name: Prepare Build - run: | - bash ./prepare.sh - - name: Install and Build packages - run: | - export VITASDK=/usr/local/vitasdk - export PATH=$VITASDK/bin:$PATH - for f in ${{ matrix.package }}; do bash ./install_or_build.sh $f; done - - name: Export package - run: | - export PACKAGE=`echo ${{ matrix.package }} | awk '{print $NF}'` - echo "PACKAGE=$PACKAGE" >> $GITHUB_ENV - - name: Rename package - run: | - export FILE=`echo ${{ env.PACKAGE }}/*-arm.tar.xz` - mv $FILE ${{ env.PACKAGE }}/${{ env.PACKAGE }}.tar.xz - - uses: actions/upload-artifact@v6 - with: - name: ${{ env.PACKAGE }} - path: ${{ env.PACKAGE }}/${{ env.PACKAGE }}.tar.xz - if-no-files-found: error upload-releases: - needs: [prepare_jobs, build, build_depends] - runs-on: ubuntu-latest - if: contains(github.ref,'refs/heads/master') - steps: + needs: [prepare_jobs, build_tier0_main, build_tier0_slow, build_tier1_main, build_tier1_slow, build_tier2_main, build_tier2_slow, build_tier3_main, build_tier3_slow, build_tier4_main, build_tier4_slow] + runs-on: ubuntu-latest + if: contains(github.ref,'refs/heads/master') + steps: - uses: actions/checkout@v6 - - uses: actions/download-artifact@v7 + - uses: actions/download-artifact@v4 with: path: package merge-multiple: true diff --git a/.github/workflows/build_package.yml b/.github/workflows/build_package.yml new file mode 100644 index 00000000..99b1fac9 --- /dev/null +++ b/.github/workflows/build_package.yml @@ -0,0 +1,123 @@ +name: Build Package +on: + workflow_call: + inputs: + package: + required: true + type: string + image_tag: + required: true + type: string + + +jobs: + build: + runs-on: ubuntu-latest + continue-on-error: true + container: + image: ghcr.io/${{ github.repository }}/vitasdk:${{ inputs.image_tag }} + if: inputs.package != '__dummy__' + + steps: + - uses: actions/checkout@v6 + + - name: Get recursive dependencies + id: deps + shell: bash + run: | + get_all_deps() { + local pkg=$1 + [ -f "$pkg/VITABUILD" ] || return 0 + local deps=$(bash -c "source $pkg/VITABUILD && echo \${depends[@]}" 2>/dev/null || echo "") + for d in $deps; do + echo "$d" + get_all_deps "$d" + done + } + ALL_DEPS=$(get_all_deps "${{ inputs.package }}" | sort -u) + if [ -n "$ALL_DEPS" ]; then + DEPS_COMMA=$(echo "$ALL_DEPS" | paste -sd, -) + if [[ "$DEPS_COMMA" == *","* ]]; then + PATTERN="{$DEPS_COMMA}" + else + PATTERN="$DEPS_COMMA" + fi + echo "pattern=$PATTERN" >> $GITHUB_OUTPUT + echo "has_deps=true" >> $GITHUB_OUTPUT + else + echo "pattern=" >> $GITHUB_OUTPUT + echo "has_deps=false" >> $GITHUB_OUTPUT + fi + + - name: Download dependency artifacts + if: steps.deps.outputs.has_deps == 'true' + uses: actions/download-artifact@v4 + with: + path: package + merge-multiple: true + pattern: ${{ steps.deps.outputs.pattern }} + + - name: Install dependencies into sysroot + shell: bash + run: | + export VITASDK=/usr/local/vitasdk + mkdir -p $VITASDK/arm-vita-eabi + + # Function to get all recursive dependencies + get_deps() { + local pkg=$1 + [ -f "$pkg/VITABUILD" ] || return 0 + local deps=$(bash -c "source $pkg/VITABUILD && echo \${depends[@]}") + for d in $deps; do + echo $d + get_deps $d + done + } + + if [ -d "package" ]; then + + # Explicitly choose OpenSSL version for Python builds + SKIP_OPENSSL="no" + SKIP_OPENSSL_111="no" + + if [ "${{ inputs.package }}" = "cpython3" ]; then + SKIP_OPENSSL="yes" + elif [ "${{ inputs.package }}" = "cpython" ]; then + SKIP_OPENSSL_111="yes" + fi + + for file in package/*.tar.xz; do + if [ -f "$file" ]; then + pkgname=$(basename "$file" .tar.xz) + + # Handle OpenSSL conflicts + if [ "$pkgname" = "openssl" ] && [ "$SKIP_OPENSSL" = "yes" ]; then + echo "Skipping $pkgname for ${{ inputs.package }}" + continue + fi + if [ "$pkgname" = "openssl-1.1.1" ] && [ "$SKIP_OPENSSL_111" = "yes" ]; then + echo "Skipping $pkgname for ${{ inputs.package }}" + continue + fi + + tar -C $VITASDK/arm-vita-eabi/ -xvf "$file" + fi + done + fi + + - name: Build package + run: | + export VITASDK=/usr/local/vitasdk + export PATH=$VITASDK/bin:$PATH + bash ./build.sh ${{ inputs.package }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Rename package + run: | + export FILE=`echo ${{ inputs.package }}/*-arm.tar.xz` + mv $FILE ${{ inputs.package }}/${{ inputs.package }}.tar.xz + - uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.package }} + path: ${{ inputs.package }}/${{ inputs.package }}.tar.xz + if-no-files-found: error diff --git a/ALmixer/VITABUILD b/ALmixer/VITABUILD index 88d53844..762735c8 100644 --- a/ALmixer/VITABUILD +++ b/ALmixer/VITABUILD @@ -9,7 +9,9 @@ depends=('libvorbis' 'mpg123' 'libogg' 'openal-soft') build() { cd $pkgname-$pkgver mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..a7968e36 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,92 @@ +FROM ubuntu:24.04 + +# Avoid interactive prompts +ENV DEBIAN_FRONTEND=noninteractive + +# Create a non-root user for building +RUN useradd -m vita + +# Install sudo first and separately to avoid dependency issues in Docker +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends sudo && \ + echo "vita ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \ + rm -rf /var/lib/apt/lists/* + +# Install dependencies needed for vdpm and building packages +RUN apt-get update && \ + ARCH=$(dpkg --print-architecture) && \ + if [ "$ARCH" = "amd64" ]; then LIBC32="libc6-dev-i386"; else LIBC32=""; fi && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + curl \ + wget \ + git \ + cmake \ + make \ + patch \ + fakeroot \ + libarchive-tools \ + libtool-bin \ + xutils-dev \ + subversion \ + $LIBC32 \ + python3 \ + python3-pip \ + 7zip \ + build-essential \ + autoconf \ + automake \ + autotools-dev \ + m4 \ + libtool \ + pkg-config \ + gperf \ + bison \ + flex \ + linux-libc-dev \ + gcc-multilib \ + libssl-dev \ + unzip \ + zlib1g-dev \ + libncurses5-dev \ + libncursesw5-dev \ + libreadline-dev \ + libsqlite3-dev \ + libgdbm-dev \ + libdb5.3-dev \ + libbz2-dev \ + libexpat1-dev \ + liblzma-dev \ + tk-dev \ + libffi-dev \ + software-properties-common \ + && add-apt-repository ppa:deadsnakes/ppa \ + && apt-get update && apt-get install -y --no-install-recommends python3.11 python3.11-dev \ + && rm -rf /var/lib/apt/lists/* + +# Install Python 2.7 from source +RUN wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz \ + && tar -xf Python-2.7.18.tar.xz \ + && cd Python-2.7.18 \ + && ./configure --prefix=/usr/local \ + && make -j$(nproc) \ + && make install \ + && cd .. && rm -rf Python-2.7.18* + +# Clone and install VitaSDK +# We use the existing bootstrap-vitasdk.sh logic +ARG VITASDK_CACHE_BUST +RUN echo "VitaSDK Cache Bust: $VITASDK_CACHE_BUST" && \ + git clone --depth=1 https://github.com/vitasdk/vdpm.git /vdpm \ + && cd /vdpm \ + && bash bootstrap-vitasdk.sh \ + && rm -rf /vdpm + +# Set environment variables +ENV VITASDK=/usr/local/vitasdk +ENV PATH=$VITASDK/bin:$PATH + +# Ensure the non-root user owns the vitasdk directory +RUN chown -R vita:vita /usr/local/vitasdk + +USER vita +WORKDIR /workspace diff --git a/SceShaccCgExt/VITABUILD b/SceShaccCgExt/VITABUILD index 9550d5f2..8c847ee3 100644 --- a/SceShaccCgExt/VITABUILD +++ b/SceShaccCgExt/VITABUILD @@ -9,7 +9,8 @@ depends=('taihen') build() { cd $pkgname-$pkgver mkdir build && cd build - cmake .. + cmake .. -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/TinyGL/VITABUILD b/TinyGL/VITABUILD index 090eef95..96dd612b 100644 --- a/TinyGL/VITABUILD +++ b/TinyGL/VITABUILD @@ -2,15 +2,17 @@ pkgname=TinyGL pkgver=0.4 pkgrel=1 url="https://github.com/Cpasjuste/VTinyGL" -source=("git+https://github.com/Cpasjuste/VTinyGL.git") -sha256sums=('SKIP') +source=("git+https://github.com/Cpasjuste/VTinyGL.git" "vitasdk.patch") +sha256sums=('SKIP' 'SKIP') depends=('libvita2d') build() { - cd V$pkgname + cd VTinyGL + patch -Np0 -i ../vitasdk.patch make -j$(nproc) } + package () { cd V$pkgname mkdir -p $pkgdir/$prefix diff --git a/TinyGL/vitasdk.patch b/TinyGL/vitasdk.patch new file mode 100644 index 00000000..d3dacfe8 --- /dev/null +++ b/TinyGL/vitasdk.patch @@ -0,0 +1,7 @@ +--- src/vertex.c.orig 2024-04-26 12:50:51.000000000 +0200 ++++ src/vertex.c 2024-04-26 12:55:00.000000000 +0200 +@@ -1,3 +1,4 @@ ++#include + #include "zgl.h" + + void glopNormal(GLContext * c, GLParam * p) diff --git a/boost/user-config.jam b/boost/user-config.jam index 3169c17a..7f117fae 100644 --- a/boost/user-config.jam +++ b/boost/user-config.jam @@ -1,4 +1,4 @@ -using gcc : arm : arm-vita-eabi-g++ ; +using gcc : arm : arm-vita-eabi-g++ : "-std=gnu++11" ; # Stop on first error diff --git a/bzip2/VITABUILD b/bzip2/VITABUILD index 84685db3..7539d26e 100644 --- a/bzip2/VITABUILD +++ b/bzip2/VITABUILD @@ -13,7 +13,7 @@ prepare() { build() { cd ${pkgname}-${pkgver} - make -j$(nproc) CC=arm-vita-eabi-gcc AR=arm-vita-eabi-ar RANLIB=arm-vita-eabi-ranlib libbz2.a + make -j$(nproc) CC="arm-vita-eabi-gcc -std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" AR=arm-vita-eabi-ar RANLIB=arm-vita-eabi-ranlib libbz2.a } package () { diff --git a/cpython/VITABUILD b/cpython/VITABUILD index fbb47722..cb27b662 100644 --- a/cpython/VITABUILD +++ b/cpython/VITABUILD @@ -12,9 +12,16 @@ build() { package () { cd cpython-vita - sh build_vita.sh $pkgdir - sh install_extra_modules.sh $pkgdir - sh compile_modules_vita.sh $pkgdir + sed -i 's/CFLAGS="/CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types /' build_vita.sh + sed -i 's/CXXFLAGS="/CXXFLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types /' build_vita.sh + sed -i 's/LDFLAGS="/LDFLAGS="-lpthread /' build_vita.sh + + bash build_vita.sh $pkgdir + export TOKEN=${GITHUB_TOKEN} + bash install_extra_modules.sh $pkgdir + + sed -i 's/7z a -l/7z a/' compile_modules_vita.sh + bash compile_modules_vita.sh $pkgdir rm -rf $pkgdir/$prefix/bin rm -rf $pkgdir/$prefix/share } diff --git a/cpython3/VITABUILD b/cpython3/VITABUILD index 9cdd7715..58c92418 100644 --- a/cpython3/VITABUILD +++ b/cpython3/VITABUILD @@ -4,7 +4,7 @@ pkgrel=1 url="https://github.com/SonicMastr/cpython-vita" source=("git+https://github.com/SonicMastr/cpython-vita.git#branch=3.11") sha256sums=('SKIP') -depends=('openssl-1.1.1 libzip xz zlib bzip2') +depends=('openssl-1.1.1' libzip xz zlib bzip2) build() { echo "" @@ -12,8 +12,13 @@ build() { package () { cd cpython-vita - sh build_vita.sh $pkgdir - sh compile_modules_vita.sh $pkgdir + sed -i 's/CFLAGS="/CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types /' build_vita.sh + sed -i 's/configure/configure LDFLAGS="-lpthread"/' build_vita.sh + + bash build_vita.sh $pkgdir + sed -i 's/7z a -l/7z a/' compile_modules_vita.sh + bash compile_modules_vita.sh $pkgdir + rm -rf $pkgdir/$prefix/bin rm -rf $pkgdir/$prefix/share } diff --git a/create-matrix.js b/create-matrix.js index 13766b44..b76bbaa6 100644 --- a/create-matrix.js +++ b/create-matrix.js @@ -1,104 +1,158 @@ +const fs = require("fs"); +const path = require("path"); + +const args = process.argv.slice(2); const testFolder = '.'; -const fs = require('fs'); -const path = require('path') -const dependant = new Map(); +const SLOW_PACKAGES = ['icu4c', 'ffmpeg']; // Puedes añadir más aquí -const args = process.argv.slice(2); +const dependant = new Map(); +let directories = fs.readdirSync(testFolder).filter(file => fs.lstatSync(file).isDirectory()); +directories = directories.filter(directory => fs.readdirSync(directory).includes("VITABUILD")); -let isDependant = false; +directories.forEach(directory => { + const content = fs.readFileSync(path.join(directory, "VITABUILD")).toString(); + const match = content.match(/^(?:make)?depends=(.*)/m); + if (match) { + const deps = match[1].replace(/[()'"']/g, "").trim().split(/\s+/).filter(Boolean); + if (deps.length > 0) dependant.set(directory, deps); + } +}); -switch (args[0]) { - case 'dependant': - isDependant = true; - break; - case 'non_dependant': - break; - default: - return; +// Calculate Depth (Tier) +const depth = new Map(); +const visitingDepth = new Set(); +function getDepth(pkg) { + if (depth.has(pkg)) return depth.get(pkg); + if (visitingDepth.has(pkg)) { + throw new Error(`Circular dependency detected in getDepth for package: ${pkg}`); + } + visitingDepth.add(pkg); + const deps = dependant.get(pkg) || []; + if (deps.length === 0) { + visitingDepth.delete(pkg); + depth.set(pkg, 0); + return 0; + } + let maxDepDepth = 0; + deps.forEach(dep => { + maxDepDepth = Math.max(maxDepDepth, getDepth(dep)); + }); + visitingDepth.delete(pkg); + depth.set(pkg, maxDepDepth + 1); + return maxDepDepth + 1; } -resolveDependency = (name, map) => { - const dependencies = map.get(name); - if (!dependencies) { - return []; +let maxD = 0; +directories.forEach(pkg => { maxD = Math.max(maxD, getDepth(pkg)); }); + +// Determine if a package is on the "Slow Track" (itself is slow, or depends on a slow package) +const isSlowTrack = new Map(); +function checkSlow(pkg) { + if (isSlowTrack.has(pkg)) return isSlowTrack.get(pkg); + if (SLOW_PACKAGES.includes(pkg)) { + isSlowTrack.set(pkg, true); + return true; } - const ret = []; - dependencies.forEach((dep) => { - if (!map.get(dep)) { - ret.unshift(dep); - return; + const deps = dependant.get(pkg) || []; + for (let dep of deps) { + if (checkSlow(dep)) { + isSlowTrack.set(pkg, true); + return true; } - ret.push(...resolveDependency(dep, map)); - ret.push(dep); - }); - // reset - map.set(name, ret); - return ret; + } + isSlowTrack.set(pkg, false); + return false; } +directories.forEach(pkg => checkSlow(pkg)); -let directories = fs.readdirSync(testFolder).filter(file => fs.lstatSync(file).isDirectory()); +// Distribute packages into Tiers and Tracks +const tiersMain = []; +const tiersSlow = []; +for (let i = 0; i <= maxD; i++) { + tiersMain.push([]); + tiersSlow.push([]); +} -directories = directories.filter(directory => { - return fs.readdirSync(directory).filter(file => file == 'VITABUILD').length > 0; +directories.forEach(pkg => { + const d = getDepth(pkg); + if (isSlowTrack.get(pkg)) { + tiersSlow[d].push(pkg); + } else { + tiersMain[d].push(pkg); + } }); -directories.forEach(directory => { - const content = fs.readFileSync(path.join(directory, "VITABUILD")); - const lines = content.toString().split('\n'); - for (let i = 0; i < lines.length; i++) { - const KV = lines[i].split("="); - if (KV.length > 1 && (KV[0].trim() == 'depends' || KV[0].trim() == 'makedepends')) { - - const dependencies = KV[1].trim().replace("(", "").replace(")", "").replace(/\'||\)/g, "").split(' '); - if (dependencies[0] != '') { - dependant.set(directory, dependencies); - } - - break; - } - } +// To prevent GitHub Actions Matrix errors when an array is empty, we add a dummy element +for (let i = 0; i <= maxD; i++) { + if (tiersMain[i].length === 0) tiersMain[i].push("__dummy__"); + if (tiersSlow[i].length === 0) tiersSlow[i].push("__dummy__"); +} -}) +const output = { + max_tier: maxD +}; +for (let i = 0; i <= maxD; i++) { + output[`tier${i}_main`] = tiersMain[i]; + output[`tier${i}_slow`] = tiersSlow[i]; +} -dependant.forEach((value, key) => { - resolveDependency(key, dependant); -}) +if (args[0] !== 'deps') { + console.log(JSON.stringify(output)); +} -const output = { - non_dependant: [], - dependant: [] + +const visitingDeps = new Set(); +const resolveDependency = (name, map) => { + if (visitingDeps.has(name)) { + throw new Error(`Circular dependency detected in resolveDependency for package: ${name}`); + } + visitingDeps.add(name); + const deps = map.get(name); + if (!deps) { + visitingDeps.delete(name); + return []; + } + const ret = []; + deps.forEach((dep) => { + ret.push(...resolveDependency(dep, map)); + ret.push(dep); + }); + visitingDeps.delete(name); + return ret; }; -directories.forEach(library => { - const dependencies = dependant.get(library); - if (dependencies) { - let info = library; - let deps = []; - // TODO check the conflict - dependencies.forEach((dependency) => { - if (!deps.includes(dependency)) { - deps.unshift(dependency); - } - }); - - // HACK: temporary fix openssl & openssl-1.1.1 confliction - if (deps.includes('openssl') && deps.includes('openssl-1.1.1')) { - deps = deps.filter((x) => x !== 'openssl'); - } +// Add CLI argument handling for 'deps' +if (args[0] === 'deps' && args[1]) { - // join with reverse order - deps.forEach(dependency => info = dependency + " " + info); - output.dependant.push(info); - } else { - output.non_dependant.push(library); + const pkg = args[1]; + + let deps = resolveDependency(pkg, dependant); + // Remove duplicates + deps = [...new Set(deps)]; + + // HACK: temporary fix openssl & openssl-1.1.1 confliction + if (deps.includes('openssl') && deps.includes('openssl-1.1.1')) { + deps = deps.filter((x) => x !== 'openssl'); } -}) -if(isDependant) - console.log(JSON.stringify(output.dependant)) -else - console.log(JSON.stringify(output.non_dependant)) + if (deps.length > 0) { + console.log(`@(${deps.join('|')})`); + } else { + console.log(`@()`); + } + process.exit(0); +} +if (args[0] === 'deps-list' && args[1]) { + const pkg = args[1]; + let deps = resolveDependency(pkg, dependant); + deps = [...new Set(deps)]; + if (deps.includes('openssl') && deps.includes('openssl-1.1.1')) { + deps = deps.filter((x) => x !== 'openssl'); + } + console.log(deps.join(' ')); + process.exit(0); +} diff --git a/ffmpeg/VITABUILD b/ffmpeg/VITABUILD index dda49d50..cbc35284 100644 --- a/ffmpeg/VITABUILD +++ b/ffmpeg/VITABUILD @@ -32,8 +32,8 @@ build() { --cpu=cortex-a9 \ --disable-armv6t2 \ --target-os=none \ - --extra-cflags=" -Wl,-q -O2 -ftree-vectorize -fomit-frame-pointer -ffast-math -D_BSD_SOURCE" \ - --extra-cxxflags=" -Wl,-q -O2 -ftree-vectorize -fomit-frame-pointer -ffast-math -fno-rtti -fno-exceptions -std=gnu++11 -D_BSD_SOURCE" \ + --extra-cflags=" -std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types -Wl,-q -O2 -ftree-vectorize -fomit-frame-pointer -ffast-math -D_BSD_SOURCE" \ + --extra-cxxflags=" -Wl,-q -O2 -ftree-vectorize -fomit-frame-pointer -ffast-math -fno-rtti -fno-exceptions -std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types -D_BSD_SOURCE" \ --extra-ldflags=" -L$VITASDK/lib " \ --disable-bzlib \ --disable-iconv \ diff --git a/freetype/VITABUILD b/freetype/VITABUILD index fbb7e8f7..3acb4756 100644 --- a/freetype/VITABUILD +++ b/freetype/VITABUILD @@ -9,7 +9,9 @@ depends=('bzip2 libpng zlib') build() { cd freetype-$pkgver mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DBUILD_SHARED_LIBS=OFF -DFT_DISABLE_HARFBUZZ=TRUE + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DBUILD_SHARED_LIBS=OFF -DFT_DISABLE_HARFBUZZ=TRUE \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/harfbuzz/VITABUILD b/harfbuzz/VITABUILD index 8256ffa5..3fe4c653 100644 --- a/harfbuzz/VITABUILD +++ b/harfbuzz/VITABUILD @@ -10,7 +10,9 @@ depends=('freetype') build() { cd harfbuzz-$pkgver mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_BUILD_TYPE=Release -DHB_HAVE_FREETYPE=ON + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_BUILD_TYPE=Release -DHB_HAVE_FREETYPE=ON \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/icu4c/build_vita_armv7-a.sh b/icu4c/build_vita_armv7-a.sh index 2b13a95e..d65bab03 100755 --- a/icu4c/build_vita_armv7-a.sh +++ b/icu4c/build_vita_armv7-a.sh @@ -12,8 +12,10 @@ export CFLAGS="-I$STANDALONE_TOOLCHAIN_ROOT/include/ \ -DU_HAVE_NL_LANGINFO_CODESET=0 -DU_TIMEZONE=0 \ -DUCONFIG_NO_BREAK_ITERATION=1 \ -DUCONFIG_NO_COLLATION=0 -DUCONFIG_NO_FORMATTING=0 -DUCONFIG_NO_TRANSLITERATION=0 \ --DUCONFIG_NO_REGULAR_EXPRESSIONS=1 -D_GNU_SOURCE -march=armv7-a -mfpu=neon" -export CPPFLAGS=$CFLAGS +-DUCONFIG_NO_REGULAR_EXPRESSIONS=1 -D_GNU_SOURCE -march=armv7-a -mfpu=neon \ +-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" +export CXXFLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" +export CPPFLAGS="$CFLAGS $CXXFLAGS" export LDFLAGS="-lc -lstdc++ -march=armv7-a -Wl,--fix-cortex-a8 -Wl,-rpath-link=$STANDALONE_TOOLCHAIN_ROOT/lib/" export PATH=$PATH:$STANDALONE_TOOLCHAIN_ROOT/bin diff --git a/kuio/VITABUILD b/kuio/VITABUILD index a0ec3fc5..2883854d 100644 --- a/kuio/VITABUILD +++ b/kuio/VITABUILD @@ -2,13 +2,15 @@ pkgname=kuio pkgver=9999 pkgrel=1 url="https://github.com/Rinnegatamante/kuio" -source=("git+https://github.com/Rinnegatamante/kuio.git") -sha256sums=('SKIP') +source=("git+https://github.com/Rinnegatamante/kuio.git" "vitasdk.patch") +sha256sums=('SKIP' 'SKIP') depends=('taihen') build() { cd $pkgname + patch -Np0 -i ../vitasdk.patch mkdir build && cd build + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix make -j$(nproc) } diff --git a/kuio/vitasdk.patch b/kuio/vitasdk.patch new file mode 100644 index 00000000..b0920e33 --- /dev/null +++ b/kuio/vitasdk.patch @@ -0,0 +1,10 @@ +--- main.c.orig 2024-04-26 12:47:44.000000000 +0200 ++++ main.c 2024-04-26 12:50:00.000000000 +0200 +@@ -8,6 +8,7 @@ + #include + #include + #include "include/kuio.h" ++#include + + #define SAFE_MODE 1 + diff --git a/lame/VITABUILD b/lame/VITABUILD index de5fd590..bb56a577 100644 --- a/lame/VITABUILD +++ b/lame/VITABUILD @@ -7,9 +7,8 @@ sha256sums=('SKIP') build() { cd lame - export CFLAGS="-Wl,-q -O2 -ftree-vectorize -mfpu=neon -fomit-frame-pointer -ffast-math" - export CXXFLAGS=$CFLAGS - ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --disable-frontend --disable-gtktest + ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --disable-frontend --disable-gtktest \ + CFLAGS="-std=gnu11 -Wl,-q -O2 -ftree-vectorize -mfpu=neon -fomit-frame-pointer -ffast-math -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/libarchive/VITABUILD b/libarchive/VITABUILD index ce45ce37..ff1914b3 100644 --- a/libarchive/VITABUILD +++ b/libarchive/VITABUILD @@ -15,7 +15,9 @@ build() { cd ${pkgname}-${pkgver} mkdir _build && cd _build cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix \ - -DBUILD_SHARED_LIBS=OFF -DENABLE_ACL=OFF -DENABLE_CAT=OFF -DENABLE_CPIO=OFF -DENABLE_CPIO=OFF -DENABLE_LIBXML2=OFF -DENABLE_TAR=OFF -DENABLE_TEST=OFF -DENABLE_UNZIP=OFF + -DBUILD_SHARED_LIBS=OFF -DENABLE_ACL=OFF -DENABLE_CAT=OFF -DENABLE_CPIO=OFF -DENABLE_CPIO=OFF -DENABLE_LIBXML2=OFF -DENABLE_TAR=OFF -DENABLE_TEST=OFF -DENABLE_UNZIP=OFF \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/libconfig/VITABUILD b/libconfig/VITABUILD index 36793ea7..9a12f243 100644 --- a/libconfig/VITABUILD +++ b/libconfig/VITABUILD @@ -14,7 +14,9 @@ prepare() { build() { cd $pkgname-$pkgver mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=OFF -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/libftpvita/VITABUILD b/libftpvita/VITABUILD index d55351a5..f7d54f6c 100644 --- a/libftpvita/VITABUILD +++ b/libftpvita/VITABUILD @@ -7,7 +7,7 @@ sha256sums=('SKIP') build() { cd $pkgname/$pkgname - make -j$(nproc) + make -j$(nproc) CFLAGS="$CFLAGS -std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" } package () { diff --git a/libmad/VITABUILD b/libmad/VITABUILD index c7f6de57..de7c1310 100644 --- a/libmad/VITABUILD +++ b/libmad/VITABUILD @@ -8,7 +8,7 @@ sha256sums=('SKIP') build() { cd libmad-psp2 make -j$(nproc) clean - make -j$(nproc) + make -j$(nproc) CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" } package () { diff --git a/libmpeg2/VITABUILD b/libmpeg2/VITABUILD index 876ea58d..f4923468 100644 --- a/libmpeg2/VITABUILD +++ b/libmpeg2/VITABUILD @@ -7,7 +7,8 @@ sha256sums=('SKIP') build() { cd $pkgname - ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --disable-sdl + ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --disable-sdl \ + CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/libogg/VITABUILD b/libogg/VITABUILD index a1cab0b3..be93740f 100644 --- a/libogg/VITABUILD +++ b/libogg/VITABUILD @@ -8,7 +8,9 @@ sha256sums=('5c8253428e181840cd20d41f3ca16557a9cc04bad4a3d04cce84808677fa1061') build() { cd $pkgname-$pkgver mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DINSTALL_DOCS=OFF + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DINSTALL_DOCS=OFF \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/libpng/VITABUILD b/libpng/VITABUILD index 4774c051..bbcf1658 100644 --- a/libpng/VITABUILD +++ b/libpng/VITABUILD @@ -14,7 +14,9 @@ prepare() { build() { cd $pkgname mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DPNG_ARM_NEON=on -DPNG_SHARED=OFF -DSKIP_INSTALL_EXECUTABLES=ON + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DPNG_ARM_NEON=on -DPNG_SHARED=OFF -DSKIP_INSTALL_EXECUTABLES=ON \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/libtheora/VITABUILD b/libtheora/VITABUILD index 860f726b..25b6868d 100644 --- a/libtheora/VITABUILD +++ b/libtheora/VITABUILD @@ -8,7 +8,8 @@ depends=('libogg') build() { cd $pkgname-$pkgver - ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --disable-spec --disable-examples + ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --disable-spec --disable-examples \ + CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/libvita2d/VITABUILD b/libvita2d/VITABUILD index 1e3fa5f2..5e977dcb 100644 --- a/libvita2d/VITABUILD +++ b/libvita2d/VITABUILD @@ -8,7 +8,7 @@ depends=('zlib' 'libpng' 'libjpeg-turbo' 'freetype') build() { cd $pkgname/$pkgname - make -j$(nproc) CFLAGS='-Wl,-q -Wall -O3 -I$(INCLUDES) $(shell arm-vita-eabi-pkg-config --cflags freetype2)' # lto is broken on Windows vita-gcc for some reason + make -j$(nproc) CFLAGS='-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types -Wl,-q -Wall -O3 -I$(INCLUDES) $(shell arm-vita-eabi-pkg-config --cflags freetype2)' # lto is broken on Windows vita-gcc for some reason } package () { diff --git a/libvita2d_ext/VITABUILD b/libvita2d_ext/VITABUILD index c37d4374..c0bcba99 100644 --- a/libvita2d_ext/VITABUILD +++ b/libvita2d_ext/VITABUILD @@ -2,15 +2,18 @@ pkgname=libvita2d_ext pkgver=9999 pkgrel=1 url="https://github.com/frangarcj/libvita2d_ext" -source=("git+https://github.com/frangarcj/libvita2d_ext.git") -sha256sums=('SKIP') +source=("git+https://github.com/frangarcj/libvita2d_ext.git" "fini.patch") +sha256sums=('SKIP' 'SKIP') depends=('libvita2d') build() { - cd $pkgname/$pkgname + cd $pkgname + patch -Np0 -i ../fini.patch + cd $pkgname make -j$(nproc) CFLAGS='-Wl,-q -Wall -O3 -I$(INCLUDES)' # lto is broken on Windows vita-gcc for some reason } + package () { cd $pkgname/$pkgname make DESTDIR=$pkgdir install diff --git a/libvita2d_ext/fini.patch b/libvita2d_ext/fini.patch new file mode 100644 index 00000000..46874563 --- /dev/null +++ b/libvita2d_ext/fini.patch @@ -0,0 +1,11 @@ +--- libvita2d_ext/source/vita2d_ext.c.orig 2024-04-26 12:48:43.000000000 +0200 ++++ libvita2d_ext/source/vita2d_ext.c 2024-04-26 12:52:00.000000000 +0200 +@@ -31,7 +31,7 @@ + return 1; + } + +-int vita2d_ext_fini(SceGxmShaderPatcher *shaderPatcher) ++int vita2d_ext_fini() + { + _vita2d_ext_context = NULL; + _vita2d_ext_shader_patcher = NULL; diff --git a/libvorbis/VITABUILD b/libvorbis/VITABUILD index f16596a2..a78a73f1 100644 --- a/libvorbis/VITABUILD +++ b/libvorbis/VITABUILD @@ -9,7 +9,9 @@ depends=('libogg') build() { cd $pkgname-$pkgver mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/libxml2/VITABUILD b/libxml2/VITABUILD index dcb4583f..62b3571d 100644 --- a/libxml2/VITABUILD +++ b/libxml2/VITABUILD @@ -14,7 +14,9 @@ prepare() { build() { cd ${pkgname}-${pkgver} mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=/usr/local/vitasdk/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_DEBUG=OFF -DLIBXML2_WITH_HTTP=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_PROGRAMS=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_THREADS=OFF + cmake .. -DCMAKE_TOOLCHAIN_FILE=/usr/local/vitasdk/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_DEBUG=OFF -DLIBXML2_WITH_HTTP=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_PROGRAMS=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_TESTS=OFF -DLIBXML2_WITH_THREADS=OFF \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/onigmo/VITABUILD b/onigmo/VITABUILD index 8d295707..9f849b7d 100644 --- a/onigmo/VITABUILD +++ b/onigmo/VITABUILD @@ -7,7 +7,8 @@ sha256sums=('c648496b5339953b925ebf44b8de356feda8d3428fa07dc1db95bfe2570feb76') build() { cd $pkgname-$pkgver - ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static + ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static \ + CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/openal-soft/VITABUILD b/openal-soft/VITABUILD index 10e0cba1..5e357ee7 100644 --- a/openal-soft/VITABUILD +++ b/openal-soft/VITABUILD @@ -19,7 +19,9 @@ prepare() { build() { cd "${pkgname}-${pkgname}-${pkgver}" cd build # build dir already exists in openal source - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/opus/VITABUILD b/opus/VITABUILD index b93ed029..37a0ecd5 100644 --- a/opus/VITABUILD +++ b/opus/VITABUILD @@ -8,7 +8,9 @@ sha256sums=('6ffcb593207be92584df15b32466ed64bbec99109f007c82205f0194572411a1') build() { cd $pkgname-$pkgver mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DOPUS_MAY_HAVE_NEON=OFF -DOPUS_PRESUME_NEON=ON + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DOPUS_MAY_HAVE_NEON=OFF -DOPUS_PRESUME_NEON=ON \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/pib/VITABUILD b/pib/VITABUILD index 3d937325..200efb66 100644 --- a/pib/VITABUILD +++ b/pib/VITABUILD @@ -2,15 +2,17 @@ pkgname=pib pkgver=2.0 pkgrel=1 url="https://github.com/SonicMastr/Pigs-In-A-Blanket" -source=("git+https://github.com/SonicMastr/Pigs-In-A-Blanket.git") -sha256sums=('SKIP') +source=("git+https://github.com/SonicMastr/Pigs-In-A-Blanket.git" "std.patch") +sha256sums=('SKIP' 'SKIP') depends=('taihen') build() { cd "Pigs-In-A-Blanket" + patch -Np0 -i ../std.patch make -j$(nproc) USE_VITASDK=1 } + package () { cd "Pigs-In-A-Blanket" make USE_VITASDK=1 DESTDIR="${pkgdir}" install diff --git a/pib/std.patch b/pib/std.patch new file mode 100644 index 00000000..9b4c7668 --- /dev/null +++ b/pib/std.patch @@ -0,0 +1,13 @@ +--- Makefile.orig 2024-04-26 12:48:19.000000000 +0200 ++++ Makefile 2024-04-26 13:05:00.000000000 +0200 +@@ -18,6 +18,10 @@ + CC = arm-$(SDKPREFIX)-eabi-gcc + AR = arm-$(SDKPREFIX)-eabi-ar + CFLAGS += -Wl,-q -Wall -Wno-incompatible-pointer-types -Wno-pointer-sign -O3 -nostartfiles -nostdlib -DVITA -D__VITA__ ++ifeq ($(findstring g++,$(CC)),) ++CFLAGS += -std=gnu11 ++endif ++ + ASFLAGS = $(CFLAGS) + + all: lib diff --git a/pixman/VITABUILD b/pixman/VITABUILD index c5663af1..13f2c72d 100644 --- a/pixman/VITABUILD +++ b/pixman/VITABUILD @@ -9,7 +9,12 @@ build() { cd $pkgname-$pkgver sed -i.bak 's/SUBDIRS = pixman demos test/SUBDIRS = pixman/' Makefile.am autoreconf -fi - ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static + # Fix assembler issues for GCC 15 + sed -i 's/ | / + /g' pixman/pixman-arm-simd-asm.h + sed -i 's/\b0\([1-9][fb]\)\b/\1/g; s/\b0\([1-9]:\)/\1/g' pixman/pixman-arm-simd-asm.h + sed -i 's/\b0\([1-9][fb]\)\b/\1/g; s/\b0\([1-9]:\)/\1/g' pixman/pixman-arm-simd-asm.S + ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static \ + CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) } diff --git a/sdl2/VITABUILD b/sdl2/VITABUILD index 708141ab..58e053c7 100644 --- a/sdl2/VITABUILD +++ b/sdl2/VITABUILD @@ -12,7 +12,9 @@ prepare() { build() { cd "SDL2-${pkgver}" mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_BUILD_TYPE=Release -DSDL_TEST=OFF + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_BUILD_TYPE=Release -DSDL_TEST=OFF \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/sdl2_image/VITABUILD b/sdl2_image/VITABUILD index 7508c6f5..21eed32a 100644 --- a/sdl2_image/VITABUILD +++ b/sdl2_image/VITABUILD @@ -22,7 +22,9 @@ build() { cd SDL2_image-${pkgver} mkdir build && cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix \ - -DCMAKE_POSITION_INDEPENDENT_CODE=OFF -DBUILD_SHARED_LIBS=OFF -DSDL2IMAGE_SAMPLES=OFF -DSDL2IMAGE_WEBP=ON -DSDL2IMAGE_DEPS_SHARED=OFF -DSDL2IMAGE_AVIF=OFF -DSDL2IMAGE_TIF=OFF + -DCMAKE_POSITION_INDEPENDENT_CODE=OFF -DBUILD_SHARED_LIBS=OFF -DSDL2IMAGE_SAMPLES=OFF -DSDL2IMAGE_WEBP=ON -DSDL2IMAGE_DEPS_SHARED=OFF -DSDL2IMAGE_AVIF=OFF -DSDL2IMAGE_TIF=OFF \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/sdl2_ttf/VITABUILD b/sdl2_ttf/VITABUILD index c65c31ca..701890c4 100644 --- a/sdl2_ttf/VITABUILD +++ b/sdl2_ttf/VITABUILD @@ -16,7 +16,9 @@ prepare() { build() { cd SDL2_ttf-${pkgver} mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_POSITION_INDEPENDENT_CODE=OFF -DBUILD_SHARED_LIBS=OFF -DSDL2TTF_SAMPLES=OFF + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix -DCMAKE_POSITION_INDEPENDENT_CODE=OFF -DBUILD_SHARED_LIBS=OFF -DSDL2TTF_SAMPLES=OFF \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/sdl_image/VITABUILD b/sdl_image/VITABUILD index 22b5a1a3..2af3a7fb 100644 --- a/sdl_image/VITABUILD +++ b/sdl_image/VITABUILD @@ -18,6 +18,8 @@ prepare() { build() { cd "SDL_image-${pkgver}" + CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + CXXFLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --without-pic make #-j$(nproc) } diff --git a/sdl_mixer/VITABUILD b/sdl_mixer/VITABUILD index ebeb596b..be100eed 100644 --- a/sdl_mixer/VITABUILD +++ b/sdl_mixer/VITABUILD @@ -20,7 +20,10 @@ prepare() { build() { cd "SDL_mixer-${pkgver}" - PATH="$VITASDK/arm-vita-eabi/bin:$PATH" LIBS="-lvorbis -logg -lm" ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --without-pic --disable-music-cmd + PATH="$VITASDK/arm-vita-eabi/bin:$PATH" \ + CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + CXXFLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + LIBS="-lvorbis -logg -lm" ./configure --host=arm-vita-eabi --prefix=$prefix --disable-shared --enable-static --without-pic --disable-music-cmd make -j$(nproc) } diff --git a/taipool/VITABUILD b/taipool/VITABUILD index 4f49879a..d9e36bd0 100644 --- a/taipool/VITABUILD +++ b/taipool/VITABUILD @@ -8,7 +8,9 @@ sha256sums=('SKIP') build() { cd $pkgname mkdir build && cd build - cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix + cmake .. -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$prefix \ + -DCMAKE_C_FLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" \ + -DCMAKE_CXX_FLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" make -j$(nproc) } diff --git a/vitaGL/VITABUILD b/vitaGL/VITABUILD index 4c25f760..725391bc 100644 --- a/vitaGL/VITABUILD +++ b/vitaGL/VITABUILD @@ -8,7 +8,7 @@ depends=('libmathneon vitaShaRK taihen SceShaccCgExt') build() { cd $pkgname - make HAVE_SBRK=1 NO_DEBUG=1 -j$(nproc) + make HAVE_SBRK=1 NO_DEBUG=1 CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" CXXFLAGS="-std=gnu++11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion -Wno-error=incompatible-pointer-types" -j$(nproc) } package () { diff --git a/zlib/VITABUILD b/zlib/VITABUILD index 7658a04c..99345f2b 100644 --- a/zlib/VITABUILD +++ b/zlib/VITABUILD @@ -12,7 +12,8 @@ prepare() { build() { cd zlib-$pkgver - ./configure --prefix=$prefix + ./configure --prefix=$prefix \ + CFLAGS="-std=gnu11 -Wno-error=implicit-function-declaration -Wno-error=int-conversion" make -j$(nproc) }