From 7e436a1aeb19bd15aea4059e8ae1e15ad4ee7836 Mon Sep 17 00:00:00 2001 From: Dan Rosser Date: Wed, 5 Feb 2025 14:44:53 +1100 Subject: [PATCH] Android CMake - Cross compiling Linux (#490) * Workflow wait loop * Actions em build artefact (cherry picked from commit ea48478014cee42a387b427c1f12d7e4c00f23f7) * Actions fixes / script install linux cross * Debug paths * Rasbian * Android / install arm64 * fix pathing issues apothecary from calling exeternal / gstreamer * android test configure off and use toolchain * gstreamer * gstreamer + meson cross compiler * gstreamer 1.24.0 * zlib * gstreamer cross location * meson * gstreamer * meson toolchains * meson toolchain single line * Android Toolchain * Android configure * Android Configure * directory script fix test * Toolchain android * Android toolchain * meson update to latest * Android toolchain and gstreamer build * Android test no x86. FreeType Linux, GStreamer linking to freetype (it would not link to installed) * freetype fix * Android configure fix * freetype linux * freetype linux * freetype * freetype * freetype * freetype pkgconfig * freetype 2 * Perhaps you should add the directory containing `freetype.pc' * gstreamer * split scripts for raspios * os type update * Freetype * Android toolchain * Android debug and rap changes * debug paths android toolchain * Linux arm64 cross. rpi * gstreamer * android ls for toolchain * Invite some ninjas * Android Toolchain with API postfix before clang in new NDKs * Android Toolchain linker and armv7a clang * Android - arm64 CMAKE_ANDROID_ARM_NEON is set but is valid only for 'armeabi-v7a' fix * Android Toolchain Fixes * Android API variable * Android Toolchain fixes. armv7a - floating to softp * Android Add explicit target on C/C++ * Android LibXML2 * Android LibXML2 * Android SVGTiny. zlib pkg. EMSDK to 4.0.1 * Android SVGTiny * Apothecary fixes * Linux print * SVGTiny apply patch * tess2 android * Tess2. Github Summary * Tess2 * Fix workflow * gstreamer * gstreamer * meson native * menson 1 line * Menson ini * menson add -lm * gstreamer * arm64 linux * sources in ubuntu new locations * sources * Fix cross compling Linux arm64 due to bloody apt sources arch issues * Linux fixes * Andorid tess2 and linux arm64 install * Tess2 / arm64 setup * Linux fixes * Linux arm64 install minimse. and android fmt fix * linux fix * Android Pugixml * linux arm64 install fix * Pugi fix android * native install * uriparser Android * Andrioid uriparser * Update Github Summary. Secure script fix awk to just cut (arm64 package issues from depend setup for architecture on amd64) LibPNG Android * LibPNG Android copy fix Summary table fix * linux arm64 * gawk fix amd64 linux * Android brotli and freetype * arm64 * install * gawk fix * gawk fix * Android freetype. awk * Android FreeImage * awk * FreeImage Android copy * Android freetype copy fix. gawk url fix * Raspberry Pi native arm64. Setup like arm64 Linux. Fix action. Android logs supressed * Android Assimp / rpi fix action * gawk - awk just change to cut and allow gawk on cross compiler to work * Android fix assimp * Rpi * linux actions fix for gawk nightmare * gawk makes no sense * Android x86, json download for xz for arm64 * apt update android * fix json xz * x86 toolchain * sudo mark hold * package managers cant handle multi arch * zlib / assimp * cross build * setup * Assimp [5.3.1 -> 5.4.3] - Fixes for android * utf8 [4.0.5 ~ 4.0.6 ] - and tar.gz download for linux * zlib build id * utf8 fix download * all actions * json fix download linux * assimp downloader * osx install * OpenSSL fix and Android remove x86 * openssl sha fix * libxml2 entropy off for macOS * tess2 mys2. Emsripten 4.0.1 -> 4.0.2 and fix actions upload env vars * tess2 msys2 --- .github/workflows/build-android.yml | 10 +- .github/workflows/build-catos.yml | 2 +- .github/workflows/build-emscripten.yml | 17 +- .github/workflows/build-linux-cross.yml | 6 +- .github/workflows/build-linux-rpi.yml | 161 ++++---- .github/workflows/build-linux64.yml | 5 + .github/workflows/build-watchos.yml | 2 +- .github/workflows/build-xros.yml | 2 +- apothecary/apothecary | 62 ++- apothecary/configure/android_configure.sh | 247 ++++-------- apothecary/configure/linux64_configure.sh | 1 + apothecary/configure/linuxarm64_configure.sh | 67 ++-- apothecary/formulas/FreeImage/FreeImage.sh | 85 ++--- apothecary/formulas/_depends/brotli.sh | 77 ++++ apothecary/formulas/_depends/pixman.sh | 3 +- apothecary/formulas/assimp.sh | 190 +++------- apothecary/formulas/cairo/cairo.sh | 3 +- apothecary/formulas/curl/curl.sh | 2 +- apothecary/formulas/fmt/fmt.sh | 33 +- apothecary/formulas/freetype/freetype.sh | 154 +++++--- apothecary/formulas/glew/glew.sh | 2 +- apothecary/formulas/gstreamer.sh | 131 +++++++ apothecary/formulas/json.sh | 16 +- apothecary/formulas/libpng/libpng.sh | 56 ++- apothecary/formulas/libxml2/libxml2.sh | 36 +- apothecary/formulas/openssl/openssl.sh | 6 +- apothecary/formulas/pugixml.sh | 51 ++- apothecary/formulas/svgtiny/svgtiny.sh | 69 ++-- apothecary/formulas/tess2/tess2.sh | 110 +++--- apothecary/formulas/uriparser/uriparser.sh | 71 ++-- apothecary/formulas/utf8.sh | 21 +- apothecary/formulas/zlib/zlib.sh | 71 ++-- apothecary/ostype.sh | 57 ++- apothecary/toolchains/android.toolchain.cmake | 113 ++++-- apothecary/toolchains/linux64.meson.ini | 29 ++ apothecary/toolchains/linuxarm64.meson.ini | 29 ++ scripts/android/install.sh | 1 + scripts/downloader.sh | 8 +- scripts/linux/aarch64/install.sh | 72 ---- scripts/linux/arm64/install.sh | 93 +---- scripts/linux/arm64/setup.sh | 353 ++++++++---------- scripts/linux/armv6l/install.sh | 11 - scripts/linux/armv7l/install.sh | 74 ---- scripts/linux/armv8/install.sh | 11 - scripts/linux/{ => raspios}/aarch64/build.sh | 0 .../{ => raspios}/aarch64/multistrap.conf | 0 scripts/linux/{ => raspios}/aarch64/setup.sh | 30 +- scripts/linux/{ => raspios}/armv6l/.gitkeep | 0 scripts/linux/{ => raspios}/armv6l/build.sh | 0 .../{ => raspios}/armv6l/multistrap.conf | 0 scripts/linux/{ => raspios}/armv6l/setup.sh | 0 scripts/linux/{ => raspios}/armv7l/build.sh | 0 .../{ => raspios}/armv7l/multistrap.conf | 0 .../linux/{armv8 => raspios/armv7l}/setup.sh | 28 +- scripts/linux/{ => raspios}/armv8/build.sh | 0 .../linux/{armv7l => raspios/armv8}/setup.sh | 0 scripts/linux/raspios/install.sh | 157 ++++++++ scripts/osx/install.sh | 13 +- scripts/secure.sh | 8 +- scripts/summary.sh | 87 +++++ 60 files changed, 1617 insertions(+), 1326 deletions(-) create mode 100755 apothecary/formulas/gstreamer.sh create mode 100644 apothecary/toolchains/linux64.meson.ini create mode 100644 apothecary/toolchains/linuxarm64.meson.ini delete mode 100755 scripts/linux/aarch64/install.sh delete mode 100755 scripts/linux/armv6l/install.sh delete mode 100755 scripts/linux/armv7l/install.sh delete mode 100755 scripts/linux/armv8/install.sh rename scripts/linux/{ => raspios}/aarch64/build.sh (100%) rename scripts/linux/{ => raspios}/aarch64/multistrap.conf (100%) rename scripts/linux/{ => raspios}/aarch64/setup.sh (55%) rename scripts/linux/{ => raspios}/armv6l/.gitkeep (100%) rename scripts/linux/{ => raspios}/armv6l/build.sh (100%) rename scripts/linux/{ => raspios}/armv6l/multistrap.conf (100%) rename scripts/linux/{ => raspios}/armv6l/setup.sh (100%) rename scripts/linux/{ => raspios}/armv7l/build.sh (100%) rename scripts/linux/{ => raspios}/armv7l/multistrap.conf (100%) rename scripts/linux/{armv8 => raspios/armv7l}/setup.sh (64%) rename scripts/linux/{ => raspios}/armv8/build.sh (100%) rename scripts/linux/{armv7l => raspios/armv8}/setup.sh (100%) create mode 100755 scripts/linux/raspios/install.sh create mode 100755 scripts/summary.sh diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index bc66170c2..d399bee8d 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -13,7 +13,7 @@ env: NO_FORCE: 1 GA_CI_SECRET: ${{ secrets.CI_SECRET }} USE_ARTIFACT: true - DISABLE_WORKFLOW: "true" + DISABLE_WORKFLOW: "false" jobs: pre-check: @@ -37,7 +37,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - ARCH: [armv7, arm64, x86, x86_64] + ARCH: [armv7, arm64, x86_64] SDK: ["35.0.0"] NDK: ["27.2.12479018"] #"26.3.11579264", env: @@ -74,6 +74,12 @@ jobs: NDK: ${{ matrix.NDK }} - name: List output directory run: ls -lah out/ + + - name: Generate Summary + run: | + chmod +x ./scripts/summary.sh + ./scripts/summary.sh + - name: Package if: (github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding')) working-directory: ${{ env.GITHUB_WORKSPACE }} diff --git a/.github/workflows/build-catos.yml b/.github/workflows/build-catos.yml index 8ac98d5f4..18f715e13 100644 --- a/.github/workflows/build-catos.yml +++ b/.github/workflows/build-catos.yml @@ -17,7 +17,7 @@ env: NO_FORCE: 1 GA_CI_SECRET: ${{ secrets.CI_SECRET }} USE_ARTIFACT: true - DISABLE_WORKFLOW: "true" + DISABLE_WORKFLOW: "false" jobs: pre-check: diff --git a/.github/workflows/build-emscripten.yml b/.github/workflows/build-emscripten.yml index e5f3af7b5..217a98fef 100644 --- a/.github/workflows/build-emscripten.yml +++ b/.github/workflows/build-emscripten.yml @@ -14,8 +14,8 @@ concurrency: env: TARGET: "emscripten" - EMSDK_VERSION: "4.0.0" - USE_ARTIFACT: false + EMSDK_VERSION: "4.0.2" + USE_ARTIFACT: true PTHREADS_ENABLED: 1 DISABLE_WORKFLOW: "false" @@ -42,12 +42,14 @@ jobs: strategy: matrix: ARCH: [32, 64] - env: - ARCH: ${{matrix.cfg.ARCH}} steps: - uses: actions/checkout@v4.2.2 - name: Docker Step run: docker run -di --name emscripten -v $PWD:/src emscripten/emsdk:${{ env.EMSDK_VERSION }} bash + - name: Setup Environment + run: | + echo "Setting up environment for Emscripten ${{ matrix.ARCH }} " + echo "ARCH=${{ matrix.ARCH }}" >> $GITHUB_ENV - name: Scripts Calc Formula run: ./scripts/calculate_formulas.sh - name: Scripts Install @@ -152,7 +154,7 @@ jobs: run: ./scripts/build.sh env: GA_CI_SECRET: ${{ secrets.CI_SECRET }} - ARCH: ${{ matrix.ARCH }} + ARCH: ${{ env.ARCH }} - name: Package Binaries for Artifact if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') && env.USE_ARTIFACT == 'true' @@ -160,8 +162,7 @@ jobs: run: | scripts/artifact/artifact.sh env: - BUNDLE: ${{ matrix.bundle }} - ARCH: ${{ matrix.ARCH }} + ARCH: ${{ env.ARCH }} - name: Upload Artifact if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') && env.USE_ARTIFACT == 'true' @@ -186,7 +187,7 @@ jobs: scripts/package.sh env: GA_CI_SECRET: ${{ secrets.CI_SECRET }} - ARCH: ${{ matrix.ARCH }} + ARCH: ${{ env.ARCH }} - name: List output directory final run: ls -lah out/ diff --git a/.github/workflows/build-linux-cross.yml b/.github/workflows/build-linux-cross.yml index a43d5c23f..a0e8cdc0c 100644 --- a/.github/workflows/build-linux-cross.yml +++ b/.github/workflows/build-linux-cross.yml @@ -17,7 +17,7 @@ env: NO_FORCE: 1 GA_CI_SECRET: ${{ secrets.CI_SECRET }} USE_ARTIFACT: false - DISABLE_WORKFLOW: "true" + DISABLE_WORKFLOW: "false" jobs: pre-check: @@ -74,10 +74,10 @@ jobs: run: ./scripts/calculate_formulas.sh - name: Scripts Setup - run: ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/setup.sh + run: sudo ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/setup.sh - name: Scripts Install - run: ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/install.sh + run: sudo ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/install.sh - name: BuildLinux64 working-directory: ${{env.GITHUB_WORKSPACE}} diff --git a/.github/workflows/build-linux-rpi.yml b/.github/workflows/build-linux-rpi.yml index 4e1bf0d23..aec9beb06 100644 --- a/.github/workflows/build-linux-rpi.yml +++ b/.github/workflows/build-linux-rpi.yml @@ -44,96 +44,83 @@ jobs: echo "::set-output name=RELEASE=latest" fi -build-linux-aarch64: - if: needs.pre-check.outputs.workflow_disabled != 'true' - needs: pre-check - runs-on: ubuntu-latest - - strategy: - matrix: - CROSS_CPU: [cortex-a53, cortex-a72, cortex-a76] - CROSS_OS: [bookworm] - ARCH: [aarch64, armv8] - exclude: - - ARCH: armv8 - CROSS_CPU: cortex-a72 # Example exclusion, customize as needed + build-linux-aarch64: + if: needs.pre-check.outputs.workflow_disabled != 'true' + needs: pre-check + runs-on: ubuntu-latest + strategy: + matrix: + CROSS_CPU: [cortex-a53] #cortex-a72, cortex-a76 + CROSS_OS: [bookworm] + ARCH: [aarch64] - env: - CROSS_COMPILER: raspbian - CROSS_OS: ${{ matrix.CROSS_OS }} - ARCH: ${{ matrix.ARCH }} - WORKDIR: "/home/runner/work/apothecary/apothecary" - SYSROOT: "${WORKDIR}/${{ matrix.CROSS_OS }}_sysroot" - TOOLCHAIN_ROOT: "${WORKDIR}/${CROSS_COMPILER}" + env: + CROSS_COMPILER: raspbian + WORKDIR: "/home/runner/work/apothecary/apothecary" + SYSROOT: "${WORKDIR}/${{ matrix.CROSS_OS }}_sysroot" + TOOLCHAIN_ROOT: "${WORKDIR}/${CROSS_COMPILER}" - steps: - - uses: actions/checkout@v4.2.2 + steps: + - uses: actions/checkout@v4.2.2 - - name: Setup Environment - run: | - echo "Setting up environment for ${CROSS_OS} ${ARCH}" - echo "CROSS_CPU: ${matrix.CROSS_CPU}" - echo "SYSROOT: ${SYSROOT}" - echo "TOOLCHAIN_ROOT: ${TOOLCHAIN_ROOT}" + - name: Setup Environment + run: | + echo "Setting up environment for ${{ matrix.CROSS_OS }} ${{ matrix.CROSS_CPU }} ${ARCH}" + echo "CROSS_CPU: ${{ matrix.CROSS_CPU }}" + echo "SYSROOT: ${SYSROOT}" + echo "TOOLCHAIN_ROOT: ${TOOLCHAIN_ROOT}" + echo "CROSS_OS=${{ matrix.CROSS_OS }}" >> $GITHUB_ENV + echo "ARCH=${{ matrix.ARCH }}" >> $GITHUB_ENV - - name: Determine Release - id: vars - shell: bash - run: | - if [[ "${{ github.ref }}" == refs/tags/* ]]; then - echo "RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV - elif [[ "${{ github.ref }}" == "refs/heads/master" ]]; then - echo "RELEASE=nightly" >> $GITHUB_ENV - elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then - echo "RELEASE=latest" >> $GITHUB_ENV - else - echo "RELEASE=latest" >> $GITHUB_ENV - fi + - name: Determine Release + id: vars + shell: bash + run: | + if [[ "${{ github.ref }}" == refs/tags/* ]]; then + echo "RELEASE=${{ github.ref_name }}" >> $GITHUB_ENV + elif [[ "${{ github.ref }}" == "refs/heads/master" ]]; then + echo "RELEASE=nightly" >> $GITHUB_ENV + elif [[ "${{ github.ref }}" == "refs/heads/bleeding" ]]; then + echo "RELEASE=latest" >> $GITHUB_ENV + else + echo "RELEASE=latest" >> $GITHUB_ENV + fi - - name: Update and Upgrade System Packages - run: | - sudo apt update && sudo apt dist-upgrade -y - sudo apt-get install -y build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev tar wget qemu-user-static rsync xz-utils + - name: Update and Upgrade System Packages + run: | + sudo apt update && sudo apt dist-upgrade -y + sudo apt-get install -y build-essential gcc g++ gfortran git texinfo bison libncurses-dev tar wget qemu-user-static rsync xz-utils - - name: Setup Cross Compiler and Target Local File System - run: ./scripts/${{ env.TARGET }}/${{ matrix.arch }}/setup.sh - env: - CROSS_CPU: ${{ matrix.cross_cpu }} - CROSS_OS: ${{ matrix.cross_os }} + - name: Script Install + run: ./scripts/${{ env.TARGET }}/raspios/install.sh - - name: Script Install and Build - run: ./scripts/${{ env.TARGET }}/${{ matrix.arch }}/install.sh - env: - CROSS_CPU: ${{ matrix.cross_cpu }} - CROSS_OS: ${{ matrix.cross_os }} + - name: Setup Cross Compiler and Target Local File System + run: ./scripts/${{ env.TARGET }}/raspios/${{ env.ARCH }}/setup.sh - - name: Script Install and Build - run: ./scripts/${{ env.TARGET }}/${{ matrix.arch }}/build.sh - env: - CROSS_CPU: ${{ matrix.cross_cpu }} - CROSS_OS: ${{ matrix.cross_os }} + - name: Build + run: ./scripts/${{ env.TARGET }}/raspios/${{ env.ARCH }}/build.sh - - name: Package - #if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') - working-directory: ${{ env.GITHUB_WORKSPACE }} - run: scripts/package.sh - env: - BUNDLE: ${{ matrix.bundle }} - GCC: "_${{ matrix.cross_cpu }}_${{ matrix.cross_os }}" + - name: Package + #if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') + working-directory: ${{ env.GITHUB_WORKSPACE }} + run: scripts/package.sh + env: + BUNDLE: ${{ matrix.bundle }} + GCC: "_${{ matrix.CROSS_CPU }}_${{ matrix.CROSS_OS }}" - - name: List output directory - run: ls -lah out/ + - name: List output directory + run: ls -lah out/ - - name: Update Release - if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') - uses: softprops/action-gh-release@v2.1.0 - env: - GCC: "_${{ matrix.cross_cpu }}_${{ matrix.cross_os }}" - with: - token: ${{ secrets.GITHUB_TOKEN }} - tag_name: ${{ env.RELEASE }} - draft: false - files: out/openFrameworksLibs_${{ env.RELEASE }}_${{ env.TARGET }}_${{ env.ARCH }}_{{ env.GCC }}.tar.bz2 + - name: Update Release + if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') + uses: softprops/action-gh-release@v2.1.0 + env: + GCC: "_${{ matrix.CROSS_CPU }}_${{ matrix.CROSS_OS }}" + with: + token: ${{ secrets.GITHUB_TOKEN }} + tag_name: ${{ env.RELEASE }} + draft: false + files: out/openFrameworksLibs_${{ env.RELEASE }}_${{ env.TARGET }}_${{ env.ARCH }}_{{ env.GCC }}.tar.bz2 build-linux-armv6l-pi-1zero: if: needs.pre-check.outputs.workflow_disabled != 'true' @@ -167,16 +154,16 @@ build-linux-aarch64: - name: Update and Upgrade System Packages run: | sudo apt update && sudo apt dist-upgrade -y - sudo apt-get install -y build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev tar wget qemu-user-static rsync xz-utils + sudo apt-get install -y build-essential gcc g++ gfortran git texinfo bison libncurses-dev tar wget qemu-user-static rsync xz-utils - name: Setup Cross Compiler and Target Local File System - run: ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/setup.sh + run: ./scripts/${{ env.TARGET }}/raspios/setup.sh - name: Script Install and Build - run: ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/install.sh + run: ./scripts/${{ env.TARGET }}/raspios/${{ env.ARCH }}/install.sh - name: Script Install and Build - run: ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/build.sh + run: ./scripts/${{ env.TARGET }}/raspios/${{ env.ARCH }}/build.sh - name: Update Release armv6l if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') @@ -226,7 +213,7 @@ build-linux-aarch64: - name: Update and Upgrade System Packages run: | sudo apt update && sudo apt dist-upgrade -y - sudo apt-get install -y build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev tar wget qemu-user-static rsync xz-utils + sudo apt-get install -y build-essential gcc g++ gfortran git texinfo bison libncurses-dev tar wget qemu-user-static rsync xz-utils # - name: Cache raspbian folder # uses: actions/cache@v4.2.0 @@ -245,13 +232,13 @@ build-linux-aarch64: # fi - name: Setup Cross Compiler and Target Local File System - run: ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/setup.sh + run: ./scripts/${{ env.TARGET }}/raspios/setup.sh - name: Script Install and Build - run: ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/install.sh + run: ./scripts/${{ env.TARGET }}/raspios/${{ env.ARCH }}/install.sh - name: Script Install and Build - run: ./scripts/${{ env.TARGET }}/${{ env.ARCH }}/build.sh + run: ./scripts/${{ env.TARGET }}/raspios/${{ env.ARCH }}/build.sh - name: Update Release armv7l if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') diff --git a/.github/workflows/build-linux64.yml b/.github/workflows/build-linux64.yml index 614ca5b89..9168fabe7 100644 --- a/.github/workflows/build-linux64.yml +++ b/.github/workflows/build-linux64.yml @@ -105,6 +105,11 @@ jobs: - name: List packaged file run: find out/ -type f \( -name "*.zip" -o -name "*.tar.bz2" \) -exec echo {} \; + - name: Generate Summary + run: | + chmod +x ./scripts/summary.sh + ./scripts/summary.sh + # - name: Package # if: github.repository == 'openframeworks/apothecary' && github.event_name == 'push' && (startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/bleeding') # working-directory: ${{ env.GITHUB_WORKSPACE }} diff --git a/.github/workflows/build-watchos.yml b/.github/workflows/build-watchos.yml index 3fd21076e..fd998971e 100644 --- a/.github/workflows/build-watchos.yml +++ b/.github/workflows/build-watchos.yml @@ -17,7 +17,7 @@ env: NO_FORCE: 1 GA_CI_SECRET: ${{ secrets.CI_SECRET }} USE_ARTIFACT: true - DISABLE_WORKFLOW: "true" + DISABLE_WORKFLOW: "false" jobs: pre-check: diff --git a/.github/workflows/build-xros.yml b/.github/workflows/build-xros.yml index 5ddba0ed7..3ffd9d1a2 100644 --- a/.github/workflows/build-xros.yml +++ b/.github/workflows/build-xros.yml @@ -17,7 +17,7 @@ env: NO_FORCE: 1 GA_CI_SECRET: ${{ secrets.CI_SECRET }} USE_ARTIFACT: true - DISABLE_WORKFLOW: "true" + DISABLE_WORKFLOW: "false" jobs: pre-check: diff --git a/apothecary/apothecary b/apothecary/apothecary index 6608681ec..ae39c9af0 100755 --- a/apothecary/apothecary +++ b/apothecary/apothecary @@ -79,42 +79,12 @@ LOAD_SCRIPT="$(realpath "$APOTHECARY_DIR/../scripts/load.sh")" SAVE_FILE="$(realpath "$APOTHECARY_DIR/../scripts")/status.txt" SECURE_SCRIPT="$(realpath "$APOTHECARY_DIR/../scripts/secure.sh")" FORMAT_SCRIPT="$(realpath "$APOTHECARY_DIR/../scripts/format.sh")" +OSTYPE_SCRIPT="$(realpath "$APOTHECARY_DIR/ostype.sh")" +APOTHECARY_SCRIPT="$(realpath "$APOTHECARY_DIR/apothecary")" USE_SAVE=1 -### Xcode/ios specific settings - -# xcode Developer root -if [ "$(${APOTHECARY_DIR}/ostype.sh)" == "osx" ]; then - XS="xcode-select -print-path" - XCODE_DEV_ROOT= - - # used when building some libs for osx - OSX_LATEST_SDK="xcrun -sdk macosx --show-sdk-version" - OSX_SDK_VER=15.0 - OSX_MIN_SDK_VER=10.15 - - # used when building for ios, the sdks you have installed are found in: - IOS_SDK_VER=18.1 - IOS_LATEST_SDK=$(xcrun -sdk iphoneos --show-sdk-version 2>/dev/null || echo "SDKNotInstalled") - IOS_MIN_SDK_VER=15.0 - TVOS_MIN_SDK_VER=17.0 - TVOS_LATEST_SDK=$(xcrun -sdk appletvos --show-sdk-version 2>/dev/null || echo "SDKNotInstalled") - XROS_MIN_SDK_VER=1.1 - WATCHOS_MIN_SDK_VER=6.0 - if ! which realpath >&/dev/null; then - if ! which brew >&/dev/null; then - msg="ERROR: This script requires brew. See https://brew.sh for installation instructions." - echo "$(tput setaf 1)$msg$(tput sgr0)" >&2 - exit 1 - fi - echo "Installing coreutils/realpath" - brew install coreutils >&/dev/null -fi - thisDir=$( dirname "`realpath "$0"`" ) -# echo "This script is run from \"$thisDir\"" -fi BUILD_MACHINE_ARCH=`uname -m` @@ -860,6 +830,26 @@ if [ "$TYPE" = "emscripten" ]; then . "$EMSCRIPTEN_SCRIPT" fi +if [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then + XS="xcode-select -print-path" + XCODE_DEV_ROOT= + + # used when building some libs for osx + OSX_LATEST_SDK="xcrun -sdk macosx --show-sdk-version" + OSX_SDK_VER=15.0 + OSX_MIN_SDK_VER=10.15 + + # used when building for ios, the sdks you have installed are found in: + IOS_SDK_VER=18.1 + IOS_LATEST_SDK=$(xcrun -sdk iphoneos --show-sdk-version >/dev/null || echo "SDKNotInstalled") + IOS_MIN_SDK_VER=15.0 + TVOS_MIN_SDK_VER=17.0 + TVOS_LATEST_SDK=$(xcrun -sdk appletvos --show-sdk-version >/dev/null || echo "SDKNotInstalled") + XROS_MIN_SDK_VER=1.1 + WATCHOS_MIN_SDK_VER=6.0 +fi + + if [ "$TYPE" = "ios" ]; then if [[ "$IOS_LATEST_SDK" == "SDKNotInstalled" ]]; then echoError "No iOS SDK installed. Please install Xcode and ensure the iOS SDK is available." @@ -1042,7 +1032,7 @@ function installAndroidToolchain() { cd $ANDROID_NDK_ROOT/build/tools - local HOST=$(${BUILD_DIR}/../ostype.sh) + local HOST=$(${APOTHECARY_DIR}/ostype.sh) if [ "${HOST}" == "linux" ]; then ANDROID_HOST="linux-x86" @@ -2525,11 +2515,11 @@ WD=$(pwd) # change to the dir of this script cd $(dirname $0) -APOTHECARY_DIR=$(pwd) -APOTHECARY_SCRIPT=$APOTHECARY_DIR/apothecary +# APOTHECARY_DIR=$(pwd) +# # set OS & build types -HOST_OS=`./ostype.sh` +HOST_OS=$(${APOTHECARY_DIR}/ostype.sh) if [ "$TYPE" == "" ] ; then case "$HOST_OS" in windows) diff --git a/apothecary/configure/android_configure.sh b/apothecary/configure/android_configure.sh index 645f114b7..243a2396c 100755 --- a/apothecary/configure/android_configure.sh +++ b/apothecary/configure/android_configure.sh @@ -1,176 +1,91 @@ #!/usr/bin/env bash +# Set script directory +ORIGINAL_DIR="$(pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd $SCRIPT_DIR APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" -cd $APOTHECARY_LEVEL -export MAKE_TARGET="${MAKE_TARGET:-"cmake"}" -export NDK_VERSION_MAJOR="${NDK_VERSION_MAJOR:-"27"}" -export ANDROID_API="${ANDROID_API:-"34"}" +export MAKE_TARGET="${MAKE_TARGET:-cmake}" +export NDK_VERSION_MAJOR="${NDK_VERSION_MAJOR:-27}" +export ANDROID_API="${ANDROID_API:-34}" #minimum Android API supported. 21 default -CROSS_COMPILER="android" -CROSS_SYSROOT="android_ndk" -CROSSCOMPILE=${CROSSCOMPILE:-1} -CROSS_ARCH="$1" -export ABI=$1 -if [ "${CROSSCOMPILE}" -eq 0 ]; then - export ROOTFS="/" - export TOOLCHAIN_ROOT="/${CROSS_COMPILER}" -else - export ROOTFS="${APOTHECARY_LEVEL}/${CROSS_SYSROOT}" - export TOOLCHAIN_ROOT="${APOTHECARY_LEVEL}/${CROSS_COMPILER}" -fi -export HOST_ARCH=$(uname -m) -export HOST_PLATFORM=$(uname) - -if [ -z "$2" ]; then - export BUILD_SYSTEM=make - echo "android_configure: make config" -else - export BUILD_SYSTEM=$2 #make / cmake - echo "android_configure: cmake config" +if [ -z "$1" ]; then + echo "Error: ABI is not specified. Usage: $0 [BUILD_SYSTEM]" >&2 + exit 1 fi -export HOST_ARCH=$(uname -m) -export HOST_PLATFORM=$(uname) -if [ "${HOST_PLATFORM}" = "Darwin" ]; then - export HOST_PLATFORM=darwin-x86_64 - export ANDROID_TOOLHOST="linux-android" -elif [ "${HOST_PLATFORM}" == "windows" ]; then - export ANDROID_HOST="windows-x86_64" - export ANDROID_TOOLHOST="windows-android" -else - export HOST_PLATFORM=linux-x86_64 - export ANDROID_TOOLHOST="linux-android" -fi - -export HOST_TAG=$HOST_PLATFORM -export LIBSPATH=android/$ABI -export TOOLCHAIN_VERSION=4.9 -export CLANG_VERSION= -export ANDROID_NDK_HOME=$NDK_ROOT - -export TOOLCHAIN_TYPE=llvm${CLANG_VERSION} -export TOOLCHAIN=${NDK_ROOT}/toolchains/${TOOLCHAIN_TYPE}/prebuilt/${HOST_PLATFORM} - -# if [[ "$NDK_VERSION_MAJOR" = "23" || "$NDK_VERSION_MAJOR" = "24" ]]; then -export SYSROOT="${TOOLCHAIN}/sysroot" -# echo "NDK_VESION_MAJOR: ${NDK_VERSION_MAJOR}" -# fi - -echo "ANDROID_NDK_HOME: $ANDROID_NDK_HOME" -echo "SYSROOT: $SYSROOT" - -if [ "$ABI" = "armeabi-v7a" ] || [ "$ABI" = "armeabi" ]; then - export MACHINE=armv7 - export ANDROID_PREFIX=arm-${ANDROID_TOOLHOST}eabi - export ANDROID_POSTFIX=${ANDROID_PREFIX} - export GCC_TOOLCHAIN=$ANDROID_PREFIX-${TOOLCHAIN_VERSION} - -elif [ "$ABI" = "arm64-v8a" ]; then - export MACHINE=arm64 - export ANDROID_PREFIX=aarch64-${ANDROID_TOOLHOST} - export ANDROID_POSTFIX=${ANDROID_PREFIX} - export GCC_TOOLCHAIN=$ANDROID_PREFIX-${TOOLCHAIN_VERSION} - -elif [ "$ABI" = "x86" ]; then - export MACHINE=i686 - export ANDROID_PREFIX=x86 - export ANDROID_POSTFIX=i686-${ANDROID_TOOLHOST} - export GCC_TOOLCHAIN=x86-${TOOLCHAIN_VERSION} - -elif [ "$ABI" = "x86_64" ]; then - export MACHINE=x86_64 - export ANDROID_PREFIX=x86_64 - export ANDROID_POSTFIX=x86_64-${ANDROID_TOOLHOST} - export GCC_TOOLCHAIN=x86_64-${TOOLCHAIN_VERSION} - -fi -export TARGET_HOST=$ANDROID_POSTFIX -export TARGET=${ANDROID_POSTFIX} -if [ "$ABI" = "armeabi-v7a" ] || [ "$ABI" = "armeabi" ]; then - export TARGET=armv7a-${ANDROID_TOOLHOST}eabi #special fix for armv7 -fi - -# if [ "$NDK_VERSION_MAJOR" = "22" ]; then -# export LIB_SYSROOT="${SYSROOT}/usr/lib/$ANDROID_POSTFIX/arch-arm" -# fi - -export ANDROID_CMAKE_TOOLCHAIN=${NDK_ROOT}/build/cmake/android.toolchain.cmake - -export TOOLCHAIN_PATH=${NDK_ROOT}/toolchains/${TOOLCHAIN_TYPE}/prebuilt/${HOST_PLATFORM}/bin -export DEEP_TOOLCHAIN_PATH=${NDK_ROOT}/toolchains/${TOOLCHAIN_TYPE}/prebuilt/${HOST_PLATFORM}/sysroot/usr/lib/$ANDROID_POSTFIX/$ANDROID_API -export GCC_TOOLCHAIN_PATH=${NDK_ROOT}/toolchains/${GCC_TOOLCHAIN}/prebuilt/${HOST_PLATFORM} -export TOOLCHAIN_INCLUDE_PATH=${NDK_ROOT}/toolchains/${TOOLCHAIN_TYPE}/prebuilt/${HOST_PLATFORM}/sysroot/usr/include -export TOOLCHAIN_LOCAL_INCLUDE_PATH=${NDK_ROOT}/toolchains/${TOOLCHAIN_TYPE}/prebuilt/${HOST_PLATFORM}/sysroot/usr/local/include -export PATH=${PATH}:${TOOLCHAIN_PATH} -# Configure and build. -export AR=$TOOLCHAIN/bin/llvm-ar -export CC=$TOOLCHAIN/bin/${TARGET}${ANDROID_API}-clang -export CXX=$TOOLCHAIN/bin/${TARGET}${ANDROID_API}-clang++ -export AS=$TOOLCHAIN/bin/llvm-as -export LD=$TOOLCHAIN/bin/llvm-ld -export RANLIB=$TOOLCHAIN/bin/llvm-ranlib -export STRIP=$TOOLCHAIN/bin/llvm-strip - -if [ "$BUILD_SYSTEM" = "cmake" ]; then - export ANDROID_FIX_API="" # defined by default in cmake - export MAKE_TARGET="" - export MAKE_INCLUDES_CFLAGS="" - export MAKE_INCLUDES_CPPFLAGS="" - export OPTIMISE="" -else - export OPTIMISE="-Oz " - export ANDROID_FIX_API="-D__ANDROID__ -D__ANDROID_API__=${ANDROID_API}" # fixes missing stderr/api calls when linking - export MAKE_INCLUDES_CFLAGS=" -I${SYSROOT}/usr/include/${ANDROID_POSTFIX} -fPIC -fPIE -frtti" - export MAKE_INCLUDES_CPPFLAGS="-stdlib=libc++ -I${SYSROOT}/usr/include/ -I${SYSROOT}/usr/include/${ANDROID_POSTFIX} -I${NDK_ROOT}/sources/android/support/include -I${NDK_ROOT}/sources/android/cpufeatures -I${TOOLCHAIN_INCLUDE_PATH} -I${TOOLCHAIN_INCLUDE_PATH}/${ANDROID_POSTFIX} -I${TOOLCHAIN_LOCAL_INCLUDE_PATH} -frtti" - if [ "$ABI" = "armeabi-v7a" ]; then - export MAKE_TARGET="-target armv7-linux-androideabi -mfloat-abi=softfp -mfloat-abi=softfp -march=armv7-a" - elif [ $ABI = "arm64-v8a" ]; then - export MAKE_TARGET="-target aarch64-linux-android" - elif [ "$ABI" = "x86-64" ]; then - export MAKE_TARGET="-target x86_64-linux-android " - elif [ "$ABI" = "x86" ]; then - export MAKE_TARGET="-target i686-linux-android -mfpmath=sse -fno-stack-protector -msse3 -mstackrealign " - fi -fi - -export CFLAGS="${OPTIMISE} ${ANDROID_FIX_API} ${MAKE_INCLUDES_CFLAGS}" -export CPPFLAGS="${OPTIMISE} ${ANDROID_FIX_API} ${MAKE_INCLUDES_CPPFLAGS}" -export CXXFLAGS="" -#export CPPFLAGS="-v" # verbose output to test issues - -export LDFLAGS="-pie -L${NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${ABI} -L$DEEP_TOOLCHAIN_PATH " -export LIBS="" #"-lz -lc -lm -ldl -lgcc -lc++ -lc++abi" -#export LDFLAGS="$LDFLAGS $LIBS" -# -ldl -lm -lc " -export ANDROID_SYSROOT=${SYSROOT} - -echo "Toolchain: ${TOOLCHAIN_INCLUDE_PATH}" - -export PATH=${TOOLCHAIN}:$PATH +export ABI=$1 +export ANDROID_ABI=$1 +export BUILD_SYSTEM=${2:-make} -echo "AR: ${AR}" -if [ "$ABI" = "armeabi-v7a" ]; then - export CFLAGS="$CFLAGS $MAKE_TARGET " - export CPPFLAGS="$CPPFLAGS $MAKE_TARGET " - #export CPPFLAGS="$CPPFLAGS -isystem ${SYSROOT}/usr/include/arm-linux-androideabi" - export LDFLAGS="$LDFLAGS $MAKE_TARGET -Wl,--fix-cortex-a8 -Wl,--no-undefined" -elif [ $ABI = "arm64-v8a" ]; then - export CFLAGS="$CFLAGS $MAKE_TARGET " - export CPPFLAGS="$CPPFLAGS $MAKE_TARGET" - #export CPPFLAGS="$CPPFLAGS -isystem ${SYSROOT}/usr/include/aarch64-linux-android" # for ASM includes - export LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8 -Wl,--no-undefined" -elif [ "$ABI" = "x86-64" ]; then - export CFLAGS="$CFLAGS $MAKE_TARGET" - export CPPFLAGS="$CPPFLAGS $MAKE_TARGET " - #export CPPFLAGS="$CPPFLAGS -isystem ${SYSROOT}/usr/include/x86_64-linux-android" # for ASM includes - export LDFLAGS="$LDFLAGS $MAKE_TARGET -Wl,--fix-cortex-a8 -Wl,--no-undefined" -elif [ "$ABI" = "x86" ]; then - export CFLAGS="$CFLAGS $MAKE_TARGET" #march=i686 -target i686-linux-android - export CPPFLAGS="$CPPFLAGS $MAKE_TARGET" # -target i686-none-linux-android - #export CPPFLAGS="$CPPFLAGS -isystem ${SYSROOT}/usr/include/i686-linux-android" - export LDFLAGS="$LDFLAGS " -fi +export TOOLCHAIN_ROOT="${APOTHECARY_LEVEL}/android" +export NDK_ROOT="${ANDROID_NDK_ROOT}" -export CXXFLAGS="$CXXFLAGS $CPPFLAGS" +export HOST_ARCH=$(uname -m) +case "$(uname)" in + Darwin) HOST_PLATFORM="darwin-x86_64" ;; + Linux) HOST_PLATFORM="linux-x86_64" ;; + Windows) HOST_PLATFORM="windows-x86_64" ;; + *) echo "Error: Unsupported host platform." >&2; exit 1 ;; +esac + +case "$ABI" in + armeabi-v7a) + MACHINE=armv7 + ANDROID_PREFIX=arm-linux-androideabi + MAKE_TARGET="-target armv7-linux-androideabi -march=armv7-a" + ;; + arm64-v8a) + MACHINE=arm64 + ANDROID_PREFIX=aarch64-linux-android + MAKE_TARGET="-target aarch64-linux-android" + ;; + x86) + MACHINE=i686 + ANDROID_PREFIX=i686-linux-android + MAKE_TARGET="-target i686-linux-android -march=i686" + ;; + x86_64) + MACHINE=x86_64 + ANDROID_PREFIX=x86_64-linux-android + MAKE_TARGET="-target x86_64-linux-android" + ;; + *) + echo "Error: Unsupported ABI '$ABI'." >&2 + exit 1 + ;; +esac + +# Toolchain +export SYSROOT="${NDK_ROOT}/toolchains/llvm/prebuilt/${HOST_PLATFORM}/sysroot" +export TOOLCHAIN_PATH="${NDK_ROOT}/toolchains/llvm/prebuilt/${HOST_PLATFORM}/bin" +# export PATH="$TOOLCHAIN_PATH:$PATH" + +# Compiler +# export AR="$TOOLCHAIN_PATH/llvm-ar" +# export CC="$TOOLCHAIN_PATH/${ANDROID_PREFIX}${ANDROID_API}-clang" +# export CXX="$TOOLCHAIN_PATH/${ANDROID_PREFIX}${ANDROID_API}-clang++" +# export LDFLAGS="-pie -L${SYSROOT}/usr/lib/$ANDROID_PREFIX/$ANDROID_API +# echo "debug paths" +# echo "${NDK_ROOT}/toolchains/llvm/prebuilt/" +# ls -a ${NDK_ROOT}/toolchains/llvm/prebuilt/ +# echo "${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/" +# ls -a ${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/ +# echo "${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin" +# ls -a ${NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/ + +# Debug output +echo -e "\n\033[1;32m==== Android Toolchain Configuration ====\033[0m" +echo "NDK Root : $NDK_ROOT" +echo "ANDROID_NDK_ROOT : $ANDROID_NDK_ROOT" +echo "Toolchain Type : llvm" +echo "Host Platform : $HOST_PLATFORM" +echo "ANDROID_ABI : $ABI" +echo "ANDROID_API : $ANDROID_API" +echo "Sysroot : $SYSROOT" +echo "Toolchain Path : $TOOLCHAIN_PATH" +# echo "CFLAGS : $CFLAGS" +# echo "LDFLAGS : $LDFLAGS" +echo -e "=========================================\n" + +cd "$ORIGINAL_DIR" diff --git a/apothecary/configure/linux64_configure.sh b/apothecary/configure/linux64_configure.sh index 3e1c9d042..e44580804 100755 --- a/apothecary/configure/linux64_configure.sh +++ b/apothecary/configure/linux64_configure.sh @@ -95,3 +95,4 @@ echo "LDFLAGS : $LDFLAGS" echo "CFLAGS : $CFLAGS" echo "Path: [$PATH]" echo "--------------------" +cd $SCRIPT_DIR diff --git a/apothecary/configure/linuxarm64_configure.sh b/apothecary/configure/linuxarm64_configure.sh index 095183214..9917cb2a5 100755 --- a/apothecary/configure/linuxarm64_configure.sh +++ b/apothecary/configure/linuxarm64_configure.sh @@ -1,25 +1,37 @@ #!/usr/bin/env bash -# -# SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -# cd $SCRIPT_DIR -# APOTHECARY_LEVEL="$( cd "$SCRIPT_DIR/../.." && pwd )" -# cd $APOTHECARY_LEVEL -# -# CROSS_COMPILER="" -# CROSS_SYSROOT="" -# CROSS_ARCH="aarch64" -# CROSSCOMPILE=${CROSSCOMPILE:-0} -# if [ "${CROSSCOMPILE}" -eq 0 ]; then -# export ROOTFS="/" -# export TOOLCHAIN_ROOT="/${CROSS_COMPILER}" -# else -# export ROOTFS="${APOTHECARY_LEVEL}/${CROSS_SYSROOT}" -# export TOOLCHAIN_ROOT="${APOTHECARY_LEVEL}/${CROSS_COMPILER}" -# fi -# export HOST_ARCH=$(uname -m) -# export HOST_PLATFORM=$(uname) -# export SYSROOT=${ROOTFS} -# export GCC_PREFIX="${CROSS_ARCH}-linux-gnu" + +ORIGINAL_DIR="$(pwd)" +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cd $SCRIPT_DIR +APOTHECARY_LEVEL="$( cd "$SCRIPT_DIR/../.." && pwd )" +cd $APOTHECARY_LEVEL + +CROSS_ARCH="aarch64" +CROSSCOMPILE=${CROSSCOMPILE:-0} # Default to native compilation +SYSROOT_PATH="/usr/${CROSS_ARCH}-linux-gnu" + +# Initialize toolchain variables +export GCC_PREFIX="${CROSS_ARCH}-linux-gnu" +export CROSS_COMPILER="" +export ROOTFS="" +export TOOLCHAIN_ROOT="" + +# Determine if cross-compilation is needed +if [ -d "${SYSROOT_PATH}" ]; then + CROSSCOMPILE=1 + ROOTFS="${SYSROOT_PATH}" + TOOLCHAIN_ROOT="${SYSROOT_PATH}" + echo "Cross-compiling detected. Using sysroot at ${SYSROOT_PATH}" +else + CROSSCOMPILE=0 + ROOTFS="/" + TOOLCHAIN_ROOT="/usr" + echo "Native compilation detected. Using rootfs at ${ROOTFS}" +fi +export HOST_ARCH=$(uname -m) +export HOST_PLATFORM=$(uname) +export SYSROOT=${ROOTFS} + # if [ "${GCC_VERSION}" -eq 0 ]; then # export GCC_VERSION="14.2.0" # fi @@ -69,17 +81,18 @@ # fi # done -# # Debugging output -# echo "--------------------" -# echo "openFrameworks apothecary Cross Compiler: $GCC_PREFIX" +# Debugging output +echo "--------------------" +echo "openFrameworks apothecary Cross Compiler: $GCC_PREFIX" # echo "Using GCC Version: $GCC_VERSION" # echo "Library Path: $LIBRARY_PATH" -# echo "ROOTFS Path: $ROOTFS" +echo "ROOTFS Path: $ROOTFS" # echo "Toolchain ROOT: $TOOLCHAIN_ROOT" # echo "CROSS_ARCH: $CROSS_ARCH" -# echo "HOST_ARCH: $HOST_ARCH" -# echo "HOST_PLATFORM: $HOST_PLATFORM" +echo "HOST_ARCH: $HOST_ARCH" +echo "HOST_PLATFORM: $HOST_PLATFORM" # echo "LDFLAGS : $LDFLAGS" # echo "CFLAGS : $CFLAGS" # echo "Path: [$PATH]" # echo "--------------------" +cd "$ORIGINAL_DIR" diff --git a/apothecary/formulas/FreeImage/FreeImage.sh b/apothecary/formulas/FreeImage/FreeImage.sh index 9611ff746..786651529 100755 --- a/apothecary/formulas/FreeImage/FreeImage.sh +++ b/apothecary/formulas/FreeImage/FreeImage.sh @@ -168,57 +168,44 @@ function build() { elif [ "$TYPE" == "android" ]; then source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake - local BUILD_TO_DIR=$BUILD_DIR/FreeImage/build/$TYPE/$ABI - export EXTRA_LINK_FLAGS="-fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -Wno-trigraphs -fpascal-strings -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-shorten-64-to-32 -Wno-newline-eof -Wno-c++11-extensions - -DHAVE_UNISTD_H=1 -DOPJ_STATIC -DNO_LCMS -D__ANSI__ -DDISABLE_PERF_MEASUREMENT -DLIBRAW_NODLL -DLIBRAW_LIBRARY_BUILD -DFREEIMAGE_LIB - -fexceptions -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -Wno-sign-conversion -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -DNDEBUG -fPIC -fexceptions -fvisibility=hidden" - export CFLAGS="$CFLAGS $EXTRA_LINK_FLAGS -DNDEBUG -ffast-math -DPNG_ARM_NEON_OPT=0 -DDISABLE_PERF_MEASUREMENT -frtti -std=c${C_STANDARD}" - export CXXFLAGS="$CFLAGS $EXTRA_LINK_FLAGS -DNDEBUG -ffast-math -DPNG_ARM_NEON_OPT=0 -DDISABLE_PERF_MEASUREMENT -frtti -std=c++${CPP_STANDARD}" - export LDFLAGS="$LDFLAGS $EXTRA_LINK_FLAGS -shared" - - source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake - rm -rf "build_${ABI}/" - rm -rf "build_${ABI}/CMakeCache.txt" - mkdir -p "build_$ABI" - cd "./build_$ABI" + rm -rf "build__${TYPE}_${ABI}/" + mkdir -p "build__${TYPE}_$ABI" + cd "./build__${TYPE}_$ABI" rm -f CMakeCache.txt *.a *.o - CFLAGS="" - export CMAKE_CFLAGS="$CFLAGS" - #export CFLAGS="" - export CPPFLAGS="" - export CMAKE_LDFLAGS="$LDFLAGS" - export LDFLAGS="" LIBPNG_ROOT="$LIBS_ROOT/libpng/" LIBPNG_INCLUDE_DIR="$LIBS_ROOT/libpng/include" LIBPNG_LIBRARY="$LIBS_ROOT/libpng/lib/$TYPE/$ABI/libpng.a" - cmake -D CMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ - -D CMAKE_OSX_SYSROOT:PATH=${SYSROOT} \ - -D CMAKE_C_COMPILER=${CC} \ - -D CMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_C_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_CXX_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER=${CC} \ - -D CMAKE_CXX_COMPILER=${CXX} \ - -D CMAKE_C_FLAGS=${CFLAGS} \ - -D CMAKE_CXX_FLAGS=${CXXFLAGS} \ - -D ANDROID_ABI=${ABI} \ - -D CMAKE_CXX_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_C_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_STATIC_LINKER_FLAGS=${LDFLAGS} \ - -D ANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ - -D ANDROID_TOOLCHAIN=clang \ - -D CMAKE_BUILD_TYPE=Release \ - -D FT_REQUIRE_HARFBUZZ=FALSE \ + ZLIB_ROOT="$LIBS_ROOT/zlib/" + ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" + ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$ABI/zlib.a" + + cmake .. ${DEFINES} \ + -DCMAKE_ANDROID_ARCH_ABI=$ABI \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DURIPARSER_ENABLE_INSTALL=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_INCLUDE_PATH="${LIBPNG_INCLUDE_DIR}:${ZLIB_INCLUDE_DIR}" \ + -DCMAKE_LIBRARY_PATH="${LIBPNG_LIBRARY}:${ZLIB_LIBRARY}" \ -DPNG_ROOT=${LIBPNG_ROOT} \ -DPNG_INCLUDE_DIR=${LIBPNG_INCLUDE_DIR} \ -DPNG_LIBRARY=${LIBPNG_LIBRARY} \ -DBUILD_LIBPNG=OFF \ -DDISABLE_PERF_MEASUREMENT=ON \ - -DLIBRAW_LIBRARY_BUILD=ON -DLIBRAW_NODLL=ON \ + -DLIBRAW_LIBRARY_BUILD=ON \ + -DLIBRAW_NODLL=ON \ -DENABLE_VISIBILITY=OFF \ -DDHAVE_UNISTD_H=OFF \ -DPNG_ARM_NEON_OPT=OFF \ @@ -226,6 +213,8 @@ function build() { -DCMAKE_SYSROOT=$SYSROOT \ -DANDROID_NDK=$NDK_ROOT \ -DANDROID_ABI=$ABI \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ -DCMAKE_ANDROID_ARCH_ABI=$ABI \ -DANDROID_STL=c++_shared \ -DCMAKE_C_STANDARD=${C_STANDARD} \ @@ -236,9 +225,15 @@ function build() { -DBUILD_OPENEXR=OFF \ -DBUILD_WEBP=OFF \ -DBUILD_JXR=OFF \ - -G 'Unix Makefiles' .. - - make -j${PARALLEL_MAKE} VERBOSE=1 + -DZLIB_ROOT=${ZLIB_ROOT} \ + -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} \ + -DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIR} \ + -DZLIB_LIBRARY=${ZLIB_LIBRARY} \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE + cmake --build . --config Release -j${PARALLEL_MAKE} --target install cd .. elif [ "$TYPE" == "vs" ]; then @@ -410,7 +405,7 @@ function copy() { cp Source/FreeImage.h $1/include rm -rf $1/lib/$TYPE/$ABI mkdir -p $1/lib/$TYPE/$ABI - cp -v build_$ABI/libFreeImage.a $1/lib/$TYPE/$ABI/libFreeImage.a + cp -v build__${TYPE}_$ABI/Release/lib/libFreeImage.a $1/lib/$TYPE/$ABI/libFreeImage.a secure $1/lib/$TYPE/$ABI/libFreeImage.a FreeImage.pkl elif [ "$TYPE" == "emscripten" ]; then cp Source/FreeImage.h $1/include @@ -436,8 +431,8 @@ function copy() { function clean() { if [ "$TYPE" == "android" ]; then - if [ -d "build_${ABI}" ]; then - rm -r build_${ABI} + if [ -d "build__${TYPE}_${ABI}" ]; then + rm -r build__${TYPE}_${ABI} fi elif [ "$TYPE" == "emscripten" ]; then if [ -d $1/lib/$TYPE/$PLATFORM/ ]; then diff --git a/apothecary/formulas/_depends/brotli.sh b/apothecary/formulas/_depends/brotli.sh index c4660c8a7..068c76449 100755 --- a/apothecary/formulas/_depends/brotli.sh +++ b/apothecary/formulas/_depends/brotli.sh @@ -154,6 +154,52 @@ function build() { -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ -DENABLE_VISIBILITY=OFF + cmake --build . --config Release -j${PARALLEL_MAKE} --target install + cd .. + elif [[ "$TYPE" =~ ^(android)$ ]]; then + + if [ $CROSSCOMPILING -eq 1 ]; then + source $APOTHECARY_DIR/configure/${TYPE}${PLATFORM}_configure.sh + fi + + mkdir -p "build_${TYPE}_${PLATFORM}" + cd "build_${TYPE}_${PLATFORM}" + rm -f CMakeCache.txt *.a *.o + DEFINES=" + -DCMAKE_C_STANDARD=${C_STANDARD} \ + -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DBUILD_SHARED_LIBS=OFF \ + -DBUILD_TESTING=OFF" + cmake .. ${DEFINES} \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DURIPARSER_ENABLE_INSTALL=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DGCC_VERSION=${GCC_VERSION} \ + -DCMAKE_SYSTEM_NAME=$TYPE \ + -DBROTLI_DISABLE_TESTS=ON \ + -DBROTLI_BUILD_TOOLS=OFF \ + -DBROTLI_BUNDLED_MODE=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DENABLE_VISIBILITY=OFF + cmake --build . --config Release -j${PARALLEL_MAKE} --target install cd .. fi @@ -249,6 +295,37 @@ function copy() { sed -i.bak "s|^includedir=.*|includedir=${1}/include|" "$PKG_FILE" rm -v "$PKG_FILE.bak" + PKG_FILE="$1/lib/$TYPE/$PLATFORM/libbrotlienc.pc" + sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^libdir=.*|libdir=${1}/lib/${TYPE}/${PLATFORM}|" "$PKG_FILE" + sed -i.bak "s|^includedir=.*|includedir=${1}/include|" "$PKG_FILE" + rm -v "$PKG_FILE.bak" + elif [ "$TYPE" == "android" ]; then + + mkdir -p $1/lib/$TYPE/${PLATFORM}/ + cp -v -r c/include/* $1/include + cp -v "build_${TYPE}_${PLATFORM}/"*.a $1/lib/$TYPE/${PLATFORM}/ + secure $1/lib/$TYPE/${PLATFORM}/libbrotlidec.a brotli.pkl + + cp -vR "build_${TYPE}_${PLATFORM}/libbrotlicommon.pc" $1/lib/$TYPE/${PLATFORM}/libbrotlicommon.pc + cp -vR "build_${TYPE}_${PLATFORM}/libbrotlidec.pc" $1/lib/$TYPE/${PLATFORM}/libbrotlidec.pc + cp -vR "build_${TYPE}_${PLATFORM}/libbrotlienc.pc" $1/lib/$TYPE/${PLATFORM}/libbrotlienc.pc + + PKG_FILE="$1/lib/$TYPE/${PLATFORM}/libbrotlicommon.pc" + sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^libdir=.*|libdir=${1}/lib/${TYPE}/${PLATFORM}|" "$PKG_FILE" + sed -i.bak "s|^includedir=.*|includedir=${1}/include|" "$PKG_FILE" + rm -v "$PKG_FILE.bak" + + PKG_FILE="$1/lib/$TYPE/$PLATFORM/libbrotlidec.pc" + sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^libdir=.*|libdir=${1}/lib/${TYPE}/${PLATFORM}|" "$PKG_FILE" + sed -i.bak "s|^includedir=.*|includedir=${1}/include|" "$PKG_FILE" + rm -v "$PKG_FILE.bak" + PKG_FILE="$1/lib/$TYPE/$PLATFORM/libbrotlienc.pc" sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" diff --git a/apothecary/formulas/_depends/pixman.sh b/apothecary/formulas/_depends/pixman.sh index 5871356ec..c542ec501 100755 --- a/apothecary/formulas/_depends/pixman.sh +++ b/apothecary/formulas/_depends/pixman.sh @@ -25,8 +25,7 @@ function download() { downloader ${URL}/pixman-$VER.tar.gz tar -xzf pixman-$VER.tar.gz mv "pixman-$VER" pixman - - local CHECKSHA=$(shasum pixman-$VER.tar.gz | awk '{print $1}') + CHECKSHA=$(shasum -a 1 pixman-$VER.tar.gz | cut -d ' ' -f1) # if [ "$CHECKSHA" != "$SHA1" ] ; then # echoError "ERROR! SHA did not Verify: [$CHECKSHA] SHA on Record:[$SHA1] - Developer has not updated SHA or Man in the Middle Attack" # exit diff --git a/apothecary/formulas/assimp.sh b/apothecary/formulas/assimp.sh index ebb59790c..9a17c2db1 100755 --- a/apothecary/formulas/assimp.sh +++ b/apothecary/formulas/assimp.sh @@ -10,7 +10,7 @@ FORMULA_TYPES=("osx" "ios" "watchos" "catos" "xros" "tvos" "android" "emscripten FORMULA_DEPENDS=("zlib") # define the version -VER=5.3.1 +VER=5.4.3 BUILD_ID=1 DEFINES="" @@ -20,15 +20,28 @@ GIT_TAG= # download the source code and unpack it into LIB_NAME function download() { - + . "$DOWNLOADER_SCRIPT" echo "Downloading Assimp $VER" # stable release from GitHub - echo "From $GIT_URL/archive/refs/tags/v$VER.zip" - curl -LO "$GIT_URL/archive/refs/tags/v$VER.zip" + # echo "From $GIT_URL/archive/refs/tags/v$VER.zip" + # curl -LO "$GIT_URL/archive/refs/tags/v$VER.zip" + + # unzip -oq "v$VER.zip" + # mv "assimp-$VER" assimp + # rm "v$VER.zip" + - unzip -oq "v$VER.zip" - mv "assimp-$VER" assimp - rm "v$VER.zip" + if [ "$TYPE" == "vs" ]; then + downloader "$GIT_URL/archive/refs/tags/v$VER.zip" + unzip -oq v${VER}.zip + mv assimp-$VER assimp + rm v${VER}.zip + else + downloader "${GIT_URL}/archive/refs/tags/v$VER.tar.gz" + tar -xf v${VER}.tar.gz + mv assimp-${VER} assimp + rm -f v${VER}.tar.gz + fi } @@ -158,140 +171,61 @@ function build() { elif [ "$TYPE" == "android" ]; then - ANDROID_API=24 - ANDROID_PLATFORM=android-${ANDROID_API} - source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake - #stuff to remove when we upgrade android - #android complains about abs being ambigious - pfffft - #sed -i -e 's/abs(/(int)fabs(/g' include/assimp/Hash.h - #sed -i -e '/string_view/d' code/AssetLib/Obj/ObjFileParser.cpp - - if [ "$ABI" == "armeabi-v7a" ]; then - export HOST=armv7a-linux-android - DEFINES=" - -DBUILD_SHARED_LIBS=OFF - -DASSIMP_BUILD_TESTS=0 - -DASSIMP_BUILD_SAMPLES=0 - -DASSIMP_BUILD_3MF_IMPORTER=0 - -DASSIMP_BUILD_ZLIB=1 - -DANDROID_NDK=$NDK_ROOT - -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN - -DCMAKE_BUILD_TYPE=Release - -DANDROID_ABI=$ABI - -DCMAKE_ANDROID_ARCH_ABI=$ABI - -DANDROID_STL=c++_static - -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM - -DANDROID_FORCE_ARM_BUILD=TRUE - -DCMAKE_INSTALL_PREFIX=install" - - elif [ "$ABI" == "arm64-v8a" ]; then - export HOST=aarch64-linux-android - DEFINES=" - -DBUILD_SHARED_LIBS=OFF - -DASSIMP_BUILD_TESTS=0 - -DASSIMP_BUILD_SAMPLES=0 - -DASSIMP_BUILD_3MF_IMPORTER=0 - -DASSIMP_BUILD_ZLIB=1 - -DANDROID_NDK=$NDK_ROOT - -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN - -DCMAKE_BUILD_TYPE=Release - -DANDROID_ABI=$ABI - -DCMAKE_ANDROID_ARCH_ABI=$ABI - -DANDROID_STL=c++_static - -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM - -DANDROID_FORCE_ARM_BUILD=TRUE - -DCMAKE_INSTALL_PREFIX=install" - elif [ "$ABI" == "x86" ]; then - export HOST=x86-linux-android - DEFINES=" - -DBUILD_SHARED_LIBS=OFF - -DASSIMP_BUILD_TESTS=0 - -DASSIMP_BUILD_SAMPLES=0 - -DASSIMP_BUILD_3MF_IMPORTER=0 - -DASSIMP_BUILD_ZLIB=1 - -DANDROID_NDK=$NDK_ROOT - -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN - -DCMAKE_BUILD_TYPE=Release - -DANDROID_ABI=$ABI - -DCMAKE_ANDROID_ARCH_ABI=$ABI - -DANDROID_STL=c++_static - -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM - -DCMAKE_INSTALL_PREFIX=install" - elif [ "$ABI" == "x86_64" ]; then - export HOST=x86_64-linux-android - DEFINES=" - -DBUILD_SHARED_LIBS=OFF - -DASSIMP_BUILD_TESTS=0 - -DASSIMP_BUILD_SAMPLES=0 - -DASSIMP_BUILD_3MF_IMPORTER=0 - -DASSIMP_BUILD_ZLIB=1 - -DANDROID_NDK=$NDK_ROOT - -DCMAKE_TOOLCHAIN_FILE=$ANDROID_CMAKE_TOOLCHAIN - -DCMAKE_BUILD_TYPE=Release - -DANDROID_ABI=$ABI - -DCMAKE_ANDROID_ARCH_ABI=$ABI - -DANDROID_STL=c++_static - -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM - -DCMAKE_INSTALL_PREFIX=install" - fi - - mkdir -p "build_${TYPE}_${ABI}" - cd "build_${TYPE}_${ABI}" - find ./ -name "*.o" -type f -delete - rm -f CMakeCache.txt || true - export CFLAGS="" - export CPPFLAGS="" - export LDFLAGS="" - export CMAKE_LDFLAGS="$LDFLAGS" + ZLIB_ROOT="$LIBS_ROOT/zlib/" + ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" + ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$ABI/zlib.a" - cmake -S .. -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ - ${DEFINES} \ - -DCMAKE_C_COMPILER=${CC} \ - -DASSIMP_ANDROID_JNIIOSYSTEM=OFF \ - -DANDROID_STL=c++_shared \ - -DCMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -DCMAKE_C_COMPILER_RANLIB=${RANLIB} \ - -DCMAKE_CXX_COMPILER_AR=${AR} \ - -DCMAKE_C_COMPILER_AR=${AR} \ - -DAI_CONFIG_ANDROID_JNI_ASSIMP_MANAGER_SUPPORT=OFF \ - -DCMAKE_CXX_FLAGS="-fvisibility-inlines-hidden -O3 -fPIC" \ - -DCMAKE_C_FLAGS="-fvisibility-inlines-hidden -O3 -fPIC -Wno-implicit-function-declaration" \ - -DCMAKE_EXE_LINKER_FLAGS=" -Wl,--hash-style=both" \ - -DCMAKE_SHARED_LINKER_FLAGS="-Wl,--hash-style=both" \ - -DCMAKE_MODULE_LINKER_FLAGS=" -Wl,--hash-style=both" \ - -DCMAKE_CXX_STANDARD_LIBRARIES=${LIBS} \ - -DCMAKE_C_STANDARD_LIBRARIES=${LIBS} \ - -DCMAKE_STATIC_LINKER_FLAGS="${LDFLAGS} ${NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${ABI}/libc++_shared.so ${NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${ABI}/libc++abi.a " \ - -DANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ - -DCMAKE_SYSROOT=$SYSROOT \ + DEFINES=" -DCMAKE_C_STANDARD=${C_STANDARD} \ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_CXX_EXTENSIONS=OFF \ - -DANDROID_TOOLCHAIN=clang++ \ -DBUILD_SHARED_LIBS=OFF \ - -DASSIMP_BUILD_STATIC_LIB=1 \ - -DASSIMP_BUILD_TESTS=0 \ - -DASSIMP_BUILD_SAMPLES=0 \ + -DASSIMP_BUILD_TESTS=OFF \ + -DASSIMP_BUILD_SAMPLES=OFF \ + -DASSIMP_BUILD_3MF_IMPORTER=OFF \ + -DASSIMP_WARNINGS_AS_ERRORS=OFF \ + -DASSIMP_ANDROID_JNIIOSYSTEM=ON \ + -DASSIMP_BUILD_DOCS=OFF \ -DASSIMP_BUILD_STL_IMPORTER=0 \ -DASSIMP_BUILD_BLEND_IMPORTER=0 \ -DASSIMP_BUILD_3MF_IMPORTER=0 \ -DASSIMP_ENABLE_BOOST_WORKAROUND=1 \ - -DCMAKE_SYSROOT=$SYSROOT \ - -DANDROID_NDK=$NDK_ROOT \ + -D_LARGEFILE64_SOURCE=1 \ + -DASSIMP_BUILD_ZLIB=OFF" + + mkdir -p "build_${TYPE}_${ABI}" + cd "build_${TYPE}_${ABI}" + find ./ -name "*.o" -type f -delete + rm -f CMakeCache.txt *.a *.o + + cmake .. ${DEFINES} \ + -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_BUILD_TYPE=Release \ - -DANDROID_ABI=$ABI \ - -DCMAKE_ANDROID_ARCH_ABI=$ABI \ - -DANDROID_STL=c++_shared \ - -DANDROID_PLATFORM=$ANDROID_PLATFORM \ - -DANDROID_NATIVE_API_LEVEL=$ANDROID_PLATFORM \ - -DCMAKE_INSTALL_PREFIX=install \ - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY="build_$ABI" \ - -G 'Unix Makefiles' . - make clean - make -j${PARALLEL_MAKE} VERBOSE=1 + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DZLIB_ROOT=${ZLIB_ROOT} \ + -DZLIB_ROOT=${ZLIB_ROOT} \ + -DZLIB_LIBRARY=${ZLIB_LIBRARY} \ + -DZLIB_LIBRARIES=${ZLIB_LIBRARY} \ + -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} \ + -DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIR} + cmake --build . --config Release -j${PARALLEL_MAKE} --target install cd .. elif [ "$TYPE" == "emscripten" ]; then diff --git a/apothecary/formulas/cairo/cairo.sh b/apothecary/formulas/cairo/cairo.sh index 8d74fb852..46469b2ff 100755 --- a/apothecary/formulas/cairo/cairo.sh +++ b/apothecary/formulas/cairo/cairo.sh @@ -39,8 +39,7 @@ function download() { downloader ${URL}/cairo-$VER.tar.xz tar -xJf cairo-$VER.tar.xz - - local CHECKSHA=$(shasum cairo-$VER.tar.xz | awk '{print $1}') + CHECKSHA=$(shasum -a 1 cairo-$VER.tar.xz | cut -d ' ' -f1) rm cairo-$VER.tar.xz if [ "$CHECKSHA" != "$SHA1" ]; then echoError "ERROR! SHA did not Verify: [$CHECKSHA] SHA on Record:[$SHA1] - Developer has not updated SHA or Man in the Middle Attack" diff --git a/apothecary/formulas/curl/curl.sh b/apothecary/formulas/curl/curl.sh index b18225bb0..0f061d5d6 100755 --- a/apothecary/formulas/curl/curl.sh +++ b/apothecary/formulas/curl/curl.sh @@ -29,7 +29,7 @@ function download() { downloader $GIT_URL/releases/download/curl-$VER_D/curl-$VER.tar.gz tar -xf curl-$VER.tar.gz mv curl-$VER curl - local CHECKSHA=$(shasum curl-$VER.tar.gz | awk '{print $1}') + CHECKSHA=$(shasum -a 1 curl-$VER.tar.gz | cut -d ' ' -f1) if [ "$CHECKSHA" != "$SHA1" ]; then echoError "ERROR! SHA did not Verify: [$CHECKSHA] SHA on Record:[$SHA1] - Developer has not updated SHA or Man in the Middle Attack" exit 1 diff --git a/apothecary/formulas/fmt/fmt.sh b/apothecary/formulas/fmt/fmt.sh index 614fd78a8..e8742038c 100755 --- a/apothecary/formulas/fmt/fmt.sh +++ b/apothecary/formulas/fmt/fmt.sh @@ -121,28 +121,23 @@ function build() { cd "build_${TYPE}_${ABI}" rm -f CMakeCache.txt *.a *.o cmake .. ${DEFINES} \ - -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ - -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 " \ - -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1" \ - -DCMAKE_C_COMPILER=${CC} \ -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_BUILD_TYPE=Release \ - -D CMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_C_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_CXX_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER=${CC} \ - -D CMAKE_CXX_COMPILER=${CXX} \ - -D CMAKE_C_FLAGS=${CFLAGS} \ - -D CMAKE_CXX_FLAGS=${CXXFLAGS} \ - -D ANDROID_ABI=${ABI} \ - -D CMAKE_CXX_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_C_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_STATIC_LINKER_FLAGS=${LDFLAGS} \ - -D ANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ - -D ANDROID_TOOLCHAIN=clang \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ -DENABLE_VISIBILITY=OFF \ -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_CXX_EXTENSIONS=OFF \ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE cmake --build . --config Release -j${PARALLEL_MAKE} --target install cd .. @@ -237,7 +232,7 @@ function copy() { cp -R "build_${TYPE}_${PLATFORM}/Release/include/" $1/include elif [ "$TYPE" == "android" ]; then mkdir -p $1/lib/$TYPE/$ABI/ - cp -v "build_${TYPE}_${ABI}/Release/lib/libfmt.lib" $1/lib/$TYPE/$ABI/libfmt.a + cp -v "build_${TYPE}_${ABI}/Release/lib/libfmt.a" $1/lib/$TYPE/$ABI/libfmt.a secure $1/lib/$TYPE/$ABI/libfmt.a fmt.pkl cp -R "build_${TYPE}_${ABI}/Release/include/" $1/include elif [ "$TYPE" == "emscripten" ]; then diff --git a/apothecary/formulas/freetype/freetype.sh b/apothecary/formulas/freetype/freetype.sh index 199d0dc62..1455354c7 100755 --- a/apothecary/formulas/freetype/freetype.sh +++ b/apothecary/formulas/freetype/freetype.sh @@ -6,7 +6,7 @@ # # an autotools project -FORMULA_TYPES=("osx" "vs" "ios" "watchos" "catos" "xros" "tvos" "vs" "android" "emscripten") +FORMULA_TYPES=("osx" "vs" "ios" "watchos" "catos" "xros" "tvos" "vs" "android" "emscripten" "linux" ) FORMULA_DEPENDS=("zlib" "libpng" "brotli") # define the version @@ -283,8 +283,23 @@ function build() { cmake --build . --target install --config Release -j${PARALLEL_MAKE} cd .. elif [ "$TYPE" == "linux" ]; then - mkdir -p build_$TYPE - cd build_$TYPE + + if [ $CROSSCOMPILING -eq 1 ]; then + source $APOTHECARY_DIR/configure/${TYPE}${PLATFORM}_configure.sh $ABI + fi + + ZLIB_ROOT="$LIBS_ROOT/zlib/" + ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" + ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$PLATFORM/zlib.a" + + LIBPNG_ROOT="${LIBS_ROOT}/libpng/" + LIBPNG_INCLUDE_DIR="${LIBS_ROOT}/libpng/include" + LIBPNG_LIBRARY="$LIBS_ROOT/libpng/lib/${TYPE}/${PLATFORM}/libpng16.a" + + export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}:${LIBPNG_ROOT}/lib/$TYPE/$PLATFORM:${ZLIB_ROOT}/lib/$TYPE/$PLATFORM" + + mkdir -p "build_${TYPE}_${PLATFORM}" + cd "build_${TYPE}_${PLATFORM}" rm -f CMakeCache.txt *.a *.o cmake .. \ ${DEFINES} \ @@ -300,27 +315,40 @@ function build() { -DGCC_VERSION=${GCC_VERSION} \ -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/${TYPE}${PLATFORM}.toolchain.cmake \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ - -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -std=c${C_STANDARD} -Wno-implicit-function-declaration ${FLAG_RELEASE}" \ + -DCMAKE_INCLUDE_PATH="${LIBPNG_INCLUDE_DIR}:${ZLIB_INCLUDE_DIR}" \ + -DCMAKE_LIBRARY_PATH="${LIBPNG_LIBRARY}:${ZLIB_LIBRARY}" \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DBUILD_SHARED_LIBS=OFF \ + -DPNG_PNG_INCLUDE_DIR=${LIBPNG_INCLUDE_DIR} \ + -DPNG_LIBRARY=${LIBPNG_LIBRARY} \ + -DPNG_ROOT=${LIBPNG_ROOT} \ + -DZLIB_ROOT=${ZLIB_ROOT} \ + -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} \ + -DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIR} \ + -DZLIB_LIBRARY=${ZLIB_LIBRARY} \ -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ - -DCMAKE_INSTALL_INCLUDEDIR=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include cmake --build . --target install --config Release -j${PARALLEL_MAKE} cd .. elif [ "$TYPE" == "android" ]; then + ZLIB_ROOT="$LIBS_ROOT/zlib/" + ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" + ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$PLATFORM/zlib.a" + + LIBPNG_ROOT="${LIBS_ROOT}/libpng/" + LIBPNG_INCLUDE_DIR="${LIBS_ROOT}/libpng/include" + LIBPNG_LIBRARY="$LIBS_ROOT/libpng/lib/${TYPE}/${PLATFORM}/libpng16.a" + + export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}:${LIBPNG_ROOT}/lib/$TYPE/$PLATFORM:${ZLIB_ROOT}/lib/$TYPE/$PLATFORM" + source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake rm -rf "build_${ABI}/" rm -rf "build_${ABI}/CMakeCache.txt" mkdir -p "build_$ABI" cd "./build_$ABI" - CFLAGS="" - export CMAKE_CFLAGS="$CFLAGS" - export CPPFLAGS="" - export CMAKE_LDFLAGS="$LDFLAGS" - export LDFLAGS="" - NO_LINK_BROTLI=OFF if [ "$PLATFORM" == "ARM64" ]; then NO_LINK_BROTLI=ON @@ -329,46 +357,50 @@ function build() { EXTRA_DEFS=" -DFT_DISABLE_BROTLI=${NO_LINK_BROTLI} " - cmake ${DEFINES} \ - -D CMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ - -D CMAKE_OSX_SYSROOT:PATH=${SYSROOT} \ - -D CMAKE_C_COMPILER=${CC} \ - -D CMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_C_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_CXX_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER=${CC} \ - -D CMAKE_CXX_COMPILER=${CXX} \ - -D CMAKE_C_FLAGS=${CFLAGS} \ - -D CMAKE_CXX_FLAGS=${CXXFLAGS} \ + cmake .. ${DEFINES} \ + ${EXTRA_DEFS} \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include \ -DCMAKE_INSTALL_PREFIX=Release \ - -D ANDROID_ABI=${ABI} \ - -D CMAKE_CXX_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_C_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_STATIC_LINKER_FLAGS=${LDFLAGS} \ - -D ANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ - -D ANDROID_TOOLCHAIN=clang \ - -D CMAKE_BUILD_TYPE=Release \ - -D FT_REQUIRE_ZLIB=ON \ - -D FT_DISABLE_BZIP2=ON \ - -D FT_REQUIRE_HARFBUZZ=OFF \ - -D FT_DISABLE_HARFBUZZ=ON \ - -D FT_DISABLE_PNG=OFF \ - -D FT_REQUIRE_PNG=ON \ - -DCMAKE_SYSROOT=$SYSROOT \ - -DANDROID_NDK=$NDK_ROOT \ - -DANDROID_ABI=$ABI \ + -DCMAKE_INCLUDE_PATH="${LIBPNG_INCLUDE_DIR}:${ZLIB_INCLUDE_DIR}" \ + -DCMAKE_LIBRARY_PATH="${LIBPNG_LIBRARY}:${ZLIB_LIBRARY}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DFT_REQUIRE_ZLIB=ON \ + -DFT_DISABLE_BZIP2=ON \ + -DFT_REQUIRE_HARFBUZZ=OFF \ + -DFT_DISABLE_HARFBUZZ=ON \ + -DFT_DISABLE_PNG=OFF \ + -DFT_REQUIRE_PNG=ON \ -DCMAKE_ANDROID_ARCH_ABI=$ABI \ - -DANDROID_STL=c++_shared \ - -DCMAKE_C_STANDARD=${C_STANDARD} \ - -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ - -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DURIPARSER_ENABLE_INSTALL=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_INCLUDE_PATH="${LIBPNG_INCLUDE_DIR}:${ZLIB_INCLUDE_DIR}" \ + -DCMAKE_LIBRARY_PATH="${LIBPNG_LIBRARY}:${ZLIB_LIBRARY}" \ -DCMAKE_CXX_EXTENSIONS=OFF \ - -G 'Unix Makefiles' .. - - make -j${PARALLEL_MAKE} VERBOSE=1 + -DBUILD_SHARED_LIBS=OFF \ + -DPNG_PNG_INCLUDE_DIR=${LIBPNG_INCLUDE_DIR} \ + -DPNG_LIBRARY=${LIBPNG_LIBRARY} \ + -DPNG_ROOT=${LIBPNG_ROOT} \ + -DZLIB_ROOT=${ZLIB_ROOT} \ + -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} \ + -DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIR} \ + -DZLIB_LIBRARY=${ZLIB_LIBRARY} \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE + cmake --build . --config Release -j${PARALLEL_MAKE} --target install cd .. elif [ "$TYPE" == "emscripten" ]; then @@ -470,7 +502,33 @@ function copy() { . "$SECURE_SCRIPT" secure $1/lib/$TYPE/$PLATFORM/libfreetype.lib freetype.pkl # cp -v "build_${TYPE}_${ARCH}/lib/"*.pdb $1/lib/$TYPE/$PLATFORM/ + elif [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then + mkdir -p $1/lib/$TYPE/$PLATFORM/ + cp -R "build_${TYPE}_${PLATFORM}/Release/include/freetype2/" $1/include + cp -v "build_${TYPE}_${PLATFORM}/Release/lib/libfreetype.a" $1/lib/$TYPE/$PLATFORM/libfreetype.a + cp -vR "build_${TYPE}_${PLATFORM}/Release/lib/pkgconfig/freetype2.pc" $1/lib/${TYPE}/${PLATFORM}/freetype.pc + . "$SECURE_SCRIPT" + secure $1/lib/$TYPE/$PLATFORM/libfreetype.a freetype.pkl + PKG_FILE="$1/lib/$TYPE/$PLATFORM/freetype.pc" + sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^libdir=.*|libdir=${1}/lib/${TYPE}/${PLATFORM}/|" "$PKG_FILE" + sed -i.bak "s|^includedir=.*|includedir=${1}/include|" "$PKG_FILE" + rm -v "$PKG_FILE.bak" + elif [ "$TYPE" == "linux" ]; then + mkdir -p $1/lib/$TYPE/$PLATFORM/ + cp -R "build_${TYPE}_${PLATFORM}/Release/include/freetype2/" $1/include + cp -v "build_${TYPE}_${PLATFORM}/Release/lib/libfreetype.a" $1/lib/$TYPE/$PLATFORM/libfreetype.a + . "$SECURE_SCRIPT" + secure $1/lib/$TYPE/$PLATFORM/libfreetype.a freetype.pkl + cp -vR "build_${TYPE}_${PLATFORM}/Release/lib/pkgconfig/freetype2.pc" $1/lib/${TYPE}/${PLATFORM}/freetype.pc + PKG_FILE="$1/lib/$TYPE/$PLATFORM/freetype.pc" + sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^libdir=.*|libdir=${1}/lib/${TYPE}/${PLATFORM}/|" "$PKG_FILE" + sed -i.bak "s|^includedir=.*|includedir=${1}/include|" "$PKG_FILE" + rm -v "$PKG_FILE.bak" elif [ "$TYPE" == "msys2" ]; then # cp -v lib/$TYPE/libfreetype.a $1/lib/$TYPE/libfreetype.a echoWarning "TODO: copy msys2 lib" @@ -486,8 +544,8 @@ function copy() { . "$SECURE_SCRIPT" secure $1/lib/$TYPE/$PLATFORM/libfreetype.a freetype.pkl - cp -v "build_${TYPE}_$PLATFORM/freetype2.pc" $1/lib/$TYPE/$PLATFORM/freetype2.pc - PKG_FILE="$1/lib/$TYPE/$PLATFORM/freetype2.pc" + cp -v "build_${TYPE}_$PLATFORM/freetype2.pc" $1/lib/$TYPE/$PLATFORM/freetype.pc + PKG_FILE="$1/lib/$TYPE/$PLATFORM/freetype.pc" sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" sed -i.bak "s|^libdir=.*|libdir=${1}/lib/${TYPE}/${PLATFORM}/|" "$PKG_FILE" diff --git a/apothecary/formulas/glew/glew.sh b/apothecary/formulas/glew/glew.sh index 4cee223f6..f43a1e554 100755 --- a/apothecary/formulas/glew/glew.sh +++ b/apothecary/formulas/glew/glew.sh @@ -27,7 +27,7 @@ function download() { . "$DOWNLOADER_SCRIPT" downloader "${URL}/${GIT_TAG}.tgz" - local CHECKSHA=$(shasum glew-$VER.tgz | awk '{print $1}') + CHECKSHA=$(shasum -a 1 glew-$VER.tgz | cut -d ' ' -f1) if [ "$CHECKSHA" != "$SHA1" ]; then echoError "ERROR! SHA did not Verify: [$CHECKSHA] SHA on Record:[$SHA1] - Developer has not updated SHA or Man in the Middle Attack" exit 1 diff --git a/apothecary/formulas/gstreamer.sh b/apothecary/formulas/gstreamer.sh new file mode 100755 index 000000000..f155f9acd --- /dev/null +++ b/apothecary/formulas/gstreamer.sh @@ -0,0 +1,131 @@ +#!/usr/bin/env bash +# +# GStreamer + +# Define the version +FORMULA_TYPES=("linux" "osx" ) + +FORMULA_DEPENDS=( "freetype" "libpng" "zlib" ) + +VER=1.24.0 +GIT_URL=https://gitlab.freedesktop.org/gstreamer/gstreamer.git + +DEFINES="" +BUILD_ID=1 + +function download() { + . "$DOWNLOADER_SCRIPT" + FILE_NAME=gstreamer + + if [ -d $FILE_NAME ]; then + echo "Directory $FILE_NAME already exists. Pulling latest changes." + cd $FILE_NAME + git pull origin main + cd .. + else + git clone --depth=1 --branch main $GIT_URL $FILE_NAME + fi + + echo "prepare gstreamer install apts" + sudo apt-get update + sudo apt-get install -y \ + git \ + ninja-build \ + pkg-config \ + gcc \ + g++ \ + python3 \ + python3-pip \ + python3-setuptools \ + python3-wheel \ + libglib2.0-dev \ + libgstreamer1.0-dev \ + libgstreamer-plugins-base1.0-dev + echo "Preparation complete" + pip install --user --upgrade meson --break-system-packages + export PATH="$HOME/.local/bin:$PATH" + echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc +} + +function prepare() { + echo "prepare meson" + meson --version + + +} + +function build() { + echo "build gstreamer" + LIBS_ROOT=$(realpath $LIBS_DIR) + + + ZLIB_ROOT="$LIBS_ROOT/zlib/" + ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" + ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$PLATFORM/zlib.a" + + LIBPNG_ROOT="${LIBS_ROOT}/libpng/" + LIBPNG_INCLUDE_DIR="${LIBS_ROOT}/libpng/include" + LIBPNG_LIBRARY="$LIBS_ROOT/libpng/lib/${TYPE}/${PLATFORM}/libpng16.a" + + FREETYPE_ROOT="${LIBS_ROOT}/freetype/" + FREETYPE_INCLUDE_DIR="${LIBS_ROOT}/freetype/include" + FREETYPE_LIBRARY="$LIBS_ROOT/freetype/lib/${TYPE}/${PLATFORM}/libfreetype.a" + + export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}:${LIBPNG_ROOT}/lib/$TYPE/$PLATFORM:${ZLIB_ROOT}/lib/$TYPE/$PLATFORM:${FREETYPE_ROOT}/lib/$TYPE/$PLATFORM" + + pkg-config --modversion libpng + pkg-config --modversion zlib + pkg-config --modversion freetype + pkg-config --modversion gstreamer-1.0 + pkg-config --modversion gstreamer-app-1.0 + pkg-config --modversion gstreamer-video-1.0 + + BUILD_DIR="build_${TYPE}_${PLATFORM}" + mkdir -p "$BUILD_DIR" + + meson setup "$BUILD_DIR" \ + --cross-file "$APOTHECARY_DIR/toolchains/${TYPE}${PLATFORM}.meson.ini" \ + --buildtype=release \ + --default-library=static \ + --backend=ninja \ + -Dgst-full-libraries=video \ + -Dc_args="-I${LIBPNG_INCLUDE_DIR} -I${ZLIB_INCLUDE_DIR} -I${FREETYPE_INCLUDE_DIR}" \ + -Dc_link_args="${LIBPNG_LIBRARY} ${ZLIB_LIBRARY} ${FREETYPE_LIBRARY} -lm" \ + -Dcpp_link_args="${LIBPNG_LIBRARY} ${ZLIB_LIBRARY} ${FREETYPE_LIBRARY} -lm" + + ninja -C "$BUILD_DIR" + ninja install -C "$BUILD_DIR" + cd .. +} + +function copy() { + mkdir -p $1/include + mkdir -p $1/lib/$TYPE + mkdir -p $1/lib/$TYPE/$PLATFORM/ + + cp -Rv "build_${TYPE}_${PLATFORM}/Release/include" $1/ + cp -Rv "build_${TYPE}_${PLATFORM}/Release/lib" $1/lib/$TYPE/$PLATFORM/ + cp -Rv "build_${TYPE}_${PLATFORM}/Release/share" $1/$TYPE/$PLATFORM/share/ +} + +function clean() { + if [ -d "build_${TYPE}_${PLATFORM}" ]; then + rm -r build_${TYPE}_${PLATFORM} + fi +} + +function save() { + . "$SAVE_SCRIPT" + savestatus ${TYPE} "gstreamer" ${ARCH} ${VER} true "${SAVE_FILE}" +} + +function load() { + . "$LOAD_SCRIPT" + LOAD_RESULT=$(loadsave ${TYPE} "gstreamer" ${ARCH} ${VER} "$LIBS_DIR_REAL/$1/lib/$TYPE/$PLATFORM" ${BUILD_ID}) + PREBUILT=$(echo "$LOAD_RESULT" | tail -n 1) + if [ "$PREBUILT" -eq 1 ]; then + echo 1 + else + echo 0 + fi +} diff --git a/apothecary/formulas/json.sh b/apothecary/formulas/json.sh index 7f2534251..676bb4ce6 100755 --- a/apothecary/formulas/json.sh +++ b/apothecary/formulas/json.sh @@ -16,25 +16,23 @@ DEFINES="" # tools for git use GIT_URL=https://github.com/nlohmann/json GIT_TAG=v$VER +URL=${GIT_URL}/archive/refs/tags/v$VER.tar.gz # download the source code and unpack it into LIB_NAME function download() { . "$DOWNLOADER_SCRIPT" - mkdir json - cd json if [ "$PLATFORM" == "msys2" ] || [ "$PLATFORM" == "vs" ]; then + mkdir json + cd json downloader "${GIT_URL}/releases/download/v$VER/include.zip" - # Extract the zip file unzip include.zip - # Clean up the zip file after extraction rm include.zip else - downloader "${GIT_URL}/releases/download/v$VER/json.tar.xz" - # Extract the tar.xz file - tar -xvf json.tar.xz --strip-components=1 - # Clean up the tar.xz file after extraction - rm json.tar.xz + downloader "${URL}" + tar -xf "v${VER}.tar.gz" + mv "json-${VER}" json + rm v$VER.tar.gz fi } diff --git a/apothecary/formulas/libpng/libpng.sh b/apothecary/formulas/libpng/libpng.sh index 38678f52b..bb54c0c74 100755 --- a/apothecary/formulas/libpng/libpng.sh +++ b/apothecary/formulas/libpng/libpng.sh @@ -62,7 +62,7 @@ function prepare() { function build() { LIBS_ROOT=$(realpath $LIBS_DIR) - DEFINES=" + export DEFINES=" -DCMAKE_C_STANDARD=${C_STANDARD} \ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ @@ -189,44 +189,34 @@ function build() { cd "build_${TYPE}_${ABI}" rm -f CMakeCache.txt *.a *.o - export CFLAGS="$CFLAGS -DNDEBUG -ffast-math -DPNG_ARM_NEON_OPT=0 -DDISABLE_PERF_MEASUREMENT -std=c${C_STANDARD}" - export CXXFLAGS="$CFLAGS -DNDEBUG -ffast-math -DPNG_ARM_NEON_OPT=0 -DDISABLE_PERF_MEASUREMENT -std=c++${CPP_STANDARD}" - export LDFLAGS="$LDFLAGS -shared" - ZLIB_ROOT="$LIBS_ROOT/zlib/" ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$ABI/zlib.a" cmake .. ${DEFINES} \ - -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ - -DPLATFORM=$PLATFORM \ - -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ - -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ - -DCMAKE_C_COMPILER=${CC} \ -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_BUILD_TYPE=Release \ - -D CMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_C_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_CXX_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER=${CC} \ - -D CMAKE_CXX_COMPILER=${CXX} \ - -D CMAKE_C_FLAGS=${CFLAGS} \ - -D CMAKE_CXX_FLAGS=${CXXFLAGS} \ - -D ANDROID_ABI=${ABI} \ - -D CMAKE_CXX_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_C_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_STATIC_LINKER_FLAGS=${LDFLAGS} \ - -D ANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ - -D ANDROID_TOOLCHAIN=clang \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ -DZLIB_ROOT=${ZLIB_ROOT} \ -DPNG_HARDWARE_OPTIMIZATIONS=OFF \ -DZLIB_LIBRARY=${ZLIB_LIBRARY} \ -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} \ - -DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIR} \ - -DENABLE_VISIBILITY=OFF \ - -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ - -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE + -DZLIB_INCLUDE_DIRS=${ZLIB_INCLUDE_DIR} cmake --build . --config Release -j${PARALLEL_MAKE} --target install cd .. elif [ "$TYPE" == "emscripten" ]; then @@ -313,9 +303,17 @@ function copy() { cp -R "build_${TYPE}_${PLATFORM}/Release/include/" $1/include elif [ "$TYPE" == "android" ]; then mkdir -p $1/lib/$TYPE/$ABI/ - cp -v "build_${TYPE}_${ABI}/Release/lib/libpng16_static.a" $1/lib/$TYPE/$ABI/libpng.a + cp -v "build_${TYPE}_${ABI}/Release/lib/libpng16.a" $1/lib/$TYPE/$ABI/libpng.a secure $1/lib/$TYPE/$ABI/libpng.a cp -RT "build_${TYPE}_${ABI}/Release/include/" $1/include + cp -vR "build_${TYPE}_${PLATFORM}/Release/lib/pkgconfig/libpng16.pc" $1/lib/${TYPE}/${PLATFORM}/libpng16.pc + PKG_FILE="$1/lib/$TYPE/$PLATFORM/libpng16.pc" + sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^libdir=.*|libdir=${1}/lib/${TYPE}/${PLATFORM}/|" "$PKG_FILE" + sed -i.bak "s|^includedir=.*|includedir=${1}/include/libpng16|" "$PKG_FILE" + rm -v "$PKG_FILE.bak" + export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}:$1/lib/$TYPE/$PLATFORM" elif [ "$TYPE" == "emscripten" ]; then mkdir -p $1/lib/${TYPE}/${PLATFORM}/ cp -v "build_${TYPE}_${PLATFORM}/Release/lib/libpng16.a" $1/lib/$TYPE/$PLATFORM/libpng16.a diff --git a/apothecary/formulas/libxml2/libxml2.sh b/apothecary/formulas/libxml2/libxml2.sh index 295193bfd..1fc047b7e 100755 --- a/apothecary/formulas/libxml2/libxml2.sh +++ b/apothecary/formulas/libxml2/libxml2.sh @@ -170,31 +170,28 @@ function build() { ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$PLATFORM/zlib.a" - # ./autogen.sh - mkdir -p "build_${TYPE}_$PLATFORM" cd "build_${TYPE}_$PLATFORM" rm -f CMakeCache.txt *.a *.o source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake - export CMAKE_CFLAGS="$CFLAGS" - export CFLAGS="" - export CMAKE_LDFLAGS="$LDFLAGS" - export LDFLAGS="" - cmake .. -DCMAKE_TOOLCHAIN_FILE="${NDK_ROOT}/build/cmake/android.toolchain.cmake" \ - -DANDROID_ABI=$ABI \ - .. ${DEFINES} \ - -DCMAKE_ANDROID_ARCH_ABI=$ABI \ - -DANDROID_TOOLCHAIN=clang++ \ - -DCMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti " \ - -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti " \ + cmake .. ${DEFINES} \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -Wno-implicit-function-declaration ${FLAG_RELEASE}" \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ - -DCMAKE_SYSROOT=$SYSROOT \ - -DANDROID_NDK=$NDK_ROOT \ - -DCMAKE_ANDROID_ARCH_ABI=$ABI \ - -DANDROID_STL=c++_shared \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ -DCMAKE_PREFIX_PATH="${ZLIB_ROOT}" \ -DZLIB_ROOT=${ZLIB_ROOT} \ -DZLIB_INCLUDE_DIR=${ZLIB_INCLUDE_DIR} \ @@ -203,7 +200,7 @@ function build() { -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_CXX_EXTENSIONS=OFF - cmake --build . --config Release -j${PARALLEL_MAKE} + cmake --build . --config Release -j${PARALLEL_MAKE} --target install cd .. elif [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then @@ -219,6 +216,7 @@ function build() { rm -f CMakeCache.txt *.a *.o cmake .. \ ${DEFINES} \ + -DHAVE_GETENTROPY=OFF \ -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ diff --git a/apothecary/formulas/openssl/openssl.sh b/apothecary/formulas/openssl/openssl.sh index c8c27654e..f2f0b13f7 100755 --- a/apothecary/formulas/openssl/openssl.sh +++ b/apothecary/formulas/openssl/openssl.sh @@ -65,10 +65,12 @@ function download() { if ! [ -f $FILE_NAME.sha1 ]; then downloader ${MIRROR}/source/$FILE_NAME.tar.gz.sha1 fi - CHECKSHA=$(shasum $FILE_NAME.tar.gz | awk '{print $1}') + + CHECKSHA=$(shasum $FILE_NAME.tar.gz | cut -d ' ' -f1) # Extract only the SHA value from the .sha1 file - FILESUM=$(awk '{print $1}' $FILE_NAME.tar.gz.sha1) + FILESUM=$(cut -d ' ' -f1 "$FILE_NAME.tar.gz.sha1") + # Check if CHECKSHA matches both FILESUM and the expected SHA1 if [[ "$CHECKSHA" != "$FILESUM" || "$CHECKSHA" != "$SHA1" ]]; then diff --git a/apothecary/formulas/pugixml.sh b/apothecary/formulas/pugixml.sh index a5ab71c14..5257ca6b3 100755 --- a/apothecary/formulas/pugixml.sh +++ b/apothecary/formulas/pugixml.sh @@ -33,7 +33,7 @@ function prepare() { # executed inside the lib src dir function build() { - export DEFS=" -DCMAKE_C_STANDARD=${C_STANDARD} \ + export DEFINES="-DCMAKE_C_STANDARD=${C_STANDARD} \ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_CXX_EXTENSIONS=OFF @@ -45,7 +45,7 @@ function build() { mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" rm -f CMakeCache.txt *.a *.o *.a *.js - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -DCMAKE_TOOLCHAIN_FILE=$EMSDK/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake \ -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ -DPLATFORM=$PLATFORM \ @@ -84,7 +84,7 @@ function build() { ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$PLATFORM/zlib.lib" - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -DLIBRARY_SUFFIX=${ARCH} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 ${FLAGS_RELEASE} ${VS_C_FLAGS}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 ${FLAGS_RELEASE} ${VS_C_FLAGS}" \ @@ -99,7 +99,7 @@ function build() { -G "${GENERATOR_NAME}" cmake --build . --config Release -j${PARALLEL_MAKE} --target install - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -DLIBRARY_SUFFIX=${ARCH} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 ${FLAGS_DEBUG} ${VS_C_FLAGS}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 ${FLAGS_DEBUG} ${VS_C_FLAGS}" \ @@ -117,22 +117,38 @@ function build() { cd .. elif [ "$TYPE" == "android" ]; then - source $APOTHECARY_DIR/configure/android_configure.sh $ABI make - #export CFLAGS="$CFLAGS -I${NDK_ROOT}/sysroot/usr/include/${ANDROID_PREFIX} -I${NDK_ROOT}/sysroot/usr/include/" - # Compile the program - $CXX -Oz $CPPFLAGS $CXXFLAGS \ - -Wall \ - -fPIC \ - -std=c++${CPP_STANDARD} \ - -Iinclude \ - -c src/pugixml.cpp \ - -o src/pugixml.o $LDFLAGS -shared -v - $AR ruv libpugixml.a src/pugixml.o + source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake + + mkdir -p "build_${TYPE}_${ABI}" + cd "build_${TYPE}_${ABI}" + rm -f CMakeCache.txt *.a *.o + cmake .. ${DEFINES} \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DBUILD_SHARED_LIBS=OFF \ + -DPLATFORM=$PLATFORM \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DENABLE_VISIBILITY=OFF \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include \ + -DCMAKE_INSTALL_LIBDIR=lib + cmake --build . --config Release -j${PARALLEL_MAKE} --target install + elif [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" rm -f CMakeCache.txt *.a *.o - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ @@ -181,7 +197,8 @@ function copy() { secure $1/lib/$TYPE/$PLATFORM/libpugixml.a pugixml.pkl elif [ "$TYPE" == "android" ]; then mkdir -p $1/lib/$TYPE/$ABI - cp -Rv libpugixml.a $1/lib/$TYPE/$ABI/libpugixml.a + cp -Rv build_${TYPE}_${ABI}/Release/lib/libpugixml.a $1/lib/$TYPE/$ABI/libpugixml.a + cp -R "build_${TYPE}_${ABI}/Release/include/" $1/include secure $1/lib/$TYPE/$ABI/libpugixml.a pugixml.pkl elif [ "$TYPE" == "emscripten" ]; then mkdir -p $1/lib/$TYPE/$PLATFORM/ diff --git a/apothecary/formulas/svgtiny/svgtiny.sh b/apothecary/formulas/svgtiny/svgtiny.sh index e812ac283..8d1e84969 100755 --- a/apothecary/formulas/svgtiny/svgtiny.sh +++ b/apothecary/formulas/svgtiny/svgtiny.sh @@ -50,9 +50,9 @@ function download() { # sed -i -e 's/restrict//g' libwapcaplet/src/libwapcaplet.c #fi - # cd libparserutils - # patch -up1 < $FORMULA_DIR/libparseutils.patch - # cd .. + cd libparserutils + patch -up1 < $FORMULA_DIR/libparseutils.patch + cd .. } # prepare the build environment, executed inside the lib src dir @@ -97,7 +97,7 @@ function build() { mkdir -p "build_${TYPE}_${ARCH}" cd "build_${TYPE}_${ARCH}" - DEFS="-DLIBRARY_SUFFIX=${ARCH} \ + DEFINES="-DLIBRARY_SUFFIX=${ARCH} \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_STANDARD=${C_STANDARD} \ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ @@ -107,7 +107,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include" - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -Iinclude" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -Iinclude -Wno-implicit-function-declaration" \ -DCMAKE_BUILD_TYPE=Release \ @@ -138,7 +138,7 @@ function build() { mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" - DEFS="-DLIBRARY_SUFFIX=${ARCH} \ + DEFINES="-DLIBRARY_SUFFIX=${ARCH} \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_STANDARD=${C_STANDARD} \ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ @@ -148,7 +148,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include" - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -Iinclude ${FLAG_RELEASE} -I${LIBXML2_INCLUDE_DIR} -I${ZLIB_INCLUDE_DIR}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -Iinclude -Wno-implicit-function-declaration ${FLAG_RELEASE} -I${LIBXML2_INCLUDE_DIR} -I${ZLIB_INCLUDE_DIR}" \ -DCMAKE_BUILD_TYPE=Release \ @@ -183,14 +183,14 @@ function build() { cd "build_${TYPE}_${ARCH}" rm -f CMakeCache.txt *.lib *.o env CXXFLAGS="-DUSE_PTHREADS=1 ${VS_C_FLAGS} ${FLAGS_RELEASE} ${EXCEPTION_FLAGS}" - DEFS=" + DEFINES=" -DCMAKE_C_STANDARD=${C_STANDARD} \ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_INSTALL_INCLUDEDIR=include" - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -UCMAKE_CXX_FLAGS \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 " \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1" \ @@ -211,7 +211,7 @@ function build() { -A "${PLATFORM}" \ -G "${GENERATOR_NAME}" cmake --build . --config Release -j${PARALLEL_MAKE} --target install - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -UCMAKE_CXX_FLAGS \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 " \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1" \ @@ -240,36 +240,45 @@ function build() { LIBXML2_INCLUDE_DIR=$(realpath "$LIBS_ROOT/libxml2/include") LIBXML2_LIBRARY="$LIBS_ROOT/libxml2/lib/$TYPE/$ABI/libxml2.a" + ZLIB_ROOT="$LIBS_ROOT/zlib/" + ZLIB_INCLUDE_DIR="$LIBS_ROOT/zlib/include" + ZLIB_LIBRARY="$LIBS_ROOT/zlib/lib/$TYPE/$PLATFORM/zlib.a" + + DEFINES=" + -DCMAKE_C_STANDARD=${C_STANDARD} \ + -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include" + + export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}:${ZLIB_ROOT}/lib/$TYPE/$PLATFORM:${LIBXML2_ROOT}/lib/$TYPE/$PLATFORM" + mkdir -p build_${TYPE}_${ABI} cd build_${TYPE}_${ABI} rm -f CMakeCache.txt *.a *.o - export CMAKE_CFLAGS="$CFLAGS" - export CFLAGS="" - export CMAKE_LDFLAGS="$LDFLAGS" - export LDFLAGS="" - cmake .. -DCMAKE_TOOLCHAIN_FILE="${NDK_ROOT}/build/cmake/android.toolchain.cmake" \ - -DANDROID_ABI=$ABI \ - -DCMAKE_ANDROID_ARCH_ABI=$ABI \ - -DANDROID_TOOLCHAIN=clang++ \ - -DCMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti " \ - -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti " \ + cmake .. ${DEFINES} \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ - -DCMAKE_SYSROOT=$SYSROOT \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ -DDO_XML_INSTALL=ON \ - -DANDROID_NDK=$NDK_ROOT \ - -DANDROID_ABI=$ABI \ - -DANDROID_STL=c++_shared \ - -DCMAKE_C_STANDARD=${C_STANDARD} \ - -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ - -DCMAKE_CXX_STANDARD_REQUIRED=ON \ - -DCMAKE_CXX_EXTENSIONS=OFF \ - -DLIBXML2_WITH_LZMA=OFF \ -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ -DLIBXML2_ROOT=$LIBXML2_ROOT \ -DLIBXML2_INCLUDE_DIR=$LIBXML2_INCLUDE_DIR \ -DLIBXML2_LIBRARY=$LIBXML2_LIBRARY \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE} -I${LIBXML2_INCLUDE_DIR} -I${ZLIB_INCLUDE_DIR}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE} -I${LIBXML2_INCLUDE_DIR} -I${ZLIB_INCLUDE_DIR}" \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include \ -DCMAKE_CXX_EXTENSIONS=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_INSTALL_PREFIX=Release \ diff --git a/apothecary/formulas/tess2/tess2.sh b/apothecary/formulas/tess2/tess2.sh index 52410db60..489153f39 100755 --- a/apothecary/formulas/tess2/tess2.sh +++ b/apothecary/formulas/tess2/tess2.sh @@ -52,22 +52,21 @@ function prepare() { # executed inside the lib src dir function build() { - DEFS=" + export DEFINES=" -DCMAKE_C_STANDARD=${C_STANDARD} \ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_CXX_EXTENSIONS=OFF -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ - -DCMAKE_INSTALL_INCLUDEDIR=include - " + -DCMAKE_INSTALL_INCLUDEDIR=include" cp -v $FORMULA_DIR/CMakeLists.txt . if [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" rm -f CMakeCache.txt *.a *.o - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/ios.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DENABLE_BITCODE=OFF \ @@ -97,7 +96,7 @@ function build() { mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" rm -f CMakeCache.txt *.lib *.o - cmake .. ${DEFS} \ + cmake .. ${DEFINES} \ -DLIBRARY_SUFFIX=${ARCH} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1" \ @@ -120,44 +119,29 @@ function build() { cp -v $FORMULA_DIR/CMakeLists.txt . - mkdir -p "build_$ABI" - cd "./build_$ABI" + mkdir -p "build_${TYPE}_${PLATFORM}" + cd "build_${TYPE}_${PLATFORM}" rm -f CMakeCache.txt *.a *.o - export CFLAGS="" - export CMAKE_CFLAGS="$CFLAGS" - export CPPFLAGS="" - export CMAKE_LDFLAGS="$LDFLAGS" - export LDFLAGS="" - cmake -D CMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ - -D CMAKE_OSX_SYSROOT:PATH==${SYSROOT} \ - -D CMAKE_C_COMPILER==${CC} \ - -D CMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_C_COMPILER_RANLIB=${RANLIB} \ - -D CMAKE_CXX_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER_AR=${AR} \ - -D CMAKE_C_COMPILER=${CC} \ - -D CMAKE_CXX_COMPILER=${CXX} \ - -D CMAKE_C_FLAGS=${CFLAGS} \ - -D CMAKE_CXX_FLAGS=${CPPFLAGS} \ - -D ANDROID_ABI=${ABI} \ - -D CMAKE_CXX_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_C_STANDARD_LIBRARIES=${LIBS} \ - -D CMAKE_STATIC_LINKER_FLAGS=${LDFLAGS} \ - -D ANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ - -D ANDROID_TOOLCHAIN=clang \ - -DCMAKE_SYSROOT=$SYSROOT \ - -DANDROID_NDK=$NDK_ROOT \ - -DANDROID_ABI=$ABI \ - -DCMAKE_ANDROID_ARCH_ABI=$ABI \ - -DANDROID_STL=c++_shared \ - -DCMAKE_C_STANDARD=${C_STANDARD} \ - -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ - -DCMAKE_CXX_STANDARD_REQUIRED=ON \ - -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + cmake .. ${DEFINES} \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ + -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ -DCMAKE_CXX_EXTENSIONS=OFF \ - -G 'Unix Makefiles' .. - make -j${PARALLEL_MAKE} VERBOSE=1 + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_BUILD_TYPE="Release" \ + -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ + -DCMAKE_CXX_EXTENSIONS=OFF + cmake --build . --config Release -j${PARALLEL_MAKE} cd .. elif [ "$TYPE" == "emscripten" ]; then @@ -182,12 +166,30 @@ function build() { -DCMAKE_CXX_FLAGS=" ${FLAG_RELEASE}" $EMSDK/upstream/emscripten/emmake make -j${PARALLEL_MAKE}${PARALLEL_MAKE} elif [ "$TYPE" == "msys2" ]; then - mkdir -p build - cd build + mkdir -p build_${TYPE}_${PLATFORM} + cd build_${TYPE}_${PLATFORM} rm -f CMakeCache.txt *.a *.o - cp -v $FORMULA_DIR/Makefile . - cp -v $FORMULA_DIR/tess2.make . - make config=release tess2 + export DEFINES="${DEFINES} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_STANDARD=${C_STANDARD} \ + -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DBUILD_SHARED_LIBS=OFF" + + cmake .. ${DEFINES} \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_INSTALL_INCLUDEDIR=include \ + -DCMAKE_INSTALL_LIBDIR="lib" \ + -DCMAKE_VERBOSE_MAKEFILE=TRUE + + cmake --build . --target install --config Release -j${PARALLEL_MAKE} + cd .. elif [ "$TYPE" == "linux" ]; then if [ $CROSSCOMPILING -eq 1 ]; then source $APOTHECARY_DIR/configure/${TYPE}${PLATFORM}_configure.sh $ABI @@ -197,7 +199,8 @@ function build() { mkdir -p "build_${TYPE}_${PLATFORM}" cd "build_${TYPE}_${PLATFORM}" rm -f CMakeCache.txt *.a *.o *.so - DEFINES="-DLIBRARY_SUFFIX=${ABI} \ + export DEFINES="${DEFINES} \ + -DLIBRARY_SUFFIX=${ABI} \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_STANDARD=${C_STANDARD} \ -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ @@ -207,7 +210,6 @@ function build() { cmake .. ${DEFINES} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -Iinclude ${FLAG_RELEASE}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -Iinclude ${FLAG_RELEASE}" \ - -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_LIBDIR="lib" \ -DZLIB_BUILD_EXAMPLES=OFF \ -DSKIP_EXAMPLE=ON \ @@ -216,8 +218,6 @@ function build() { -DCMAKE_SYSTEM_PROCESSOR=$ABI \ -DGCC_VERSION=${GCC_VERSION} \ -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/${TYPE}${PLATFORM}.toolchain.cmake \ - -DCMAKE_INSTALL_PREFIX=Release \ - -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ -DENABLE_VISIBILITY=OFF \ -DCMAKE_INSTALL_INCLUDEDIR=include \ @@ -238,13 +238,10 @@ function build() { # executed inside the lib src dir, first arg $1 is the dest libs dir root function copy() { - - # headers rm -rf $1/include mkdir -p $1/include cp -Rv Include/* $1/include/ . "$SECURE_SCRIPT" - # lib mkdir -p $1/lib/$TYPE if [ "$TYPE" == "vs" ]; then mkdir -p $1/lib/$TYPE/$PLATFORM/ @@ -261,12 +258,12 @@ function copy() { cp -v build_${TYPE}_${PLATFORM}/libtess2.a $1/lib/$TYPE/$PLATFORM/libtess2.a secure $1/lib/$TYPE/$PLATFORM/libtess2.a tess2 elif [ "$TYPE" == "msys2" ]; then - cp -v build/libtess2.a $1/lib/$TYPE/libtess2.a + cp -v build_${TYPE}_${PLATFORM}/Release/lib/libtess2.a $1/lib/$TYPE/$PLATFORM/libtess2.a secure $1/lib/$TYPE/libtess2.a tess2 elif [ "$TYPE" == "android" ]; then rm -rf $1/lib/$TYPE/$ABI mkdir -p $1/lib/$TYPE/$ABI - cp -v build_$ABI/libtess2.a $1/lib/$TYPE/$ABI/libtess2.a + cp -v build_${TYPE}_${PLATFORM}/libtess2.a $1/lib/$TYPE/$ABI/libtess2.a secure $1/lib/$TYPE/$ABI/libtess2.a tess2 else cp -v build/$TYPE/libtess2.a $1/lib/$TYPE/libtess2.a @@ -285,12 +282,11 @@ function copy() { function clean() { if [ "$TYPE" == "vs" ]; then if [ -d "build_${TYPE}_${ARCH}" ]; then - # Delete the folder and its contents rm -r build_${TYPE}_${ARCH} fi elif [ "$TYPE" == "android" ]; then - if [ -d "build_${TYPE}_${ABI}" ]; then - rm -r build_${TYPE}_${ABI} + if [ -d "build_${TYPE}_${PLATFORM}" ]; then + rm -r build_${TYPE}_${PLATFORM} fi elif [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos|emscripten|linux)$ ]]; then if [ -d "build_${TYPE}_${PLATFORM}" ]; then diff --git a/apothecary/formulas/uriparser/uriparser.sh b/apothecary/formulas/uriparser/uriparser.sh index faea75211..ed140904a 100755 --- a/apothecary/formulas/uriparser/uriparser.sh +++ b/apothecary/formulas/uriparser/uriparser.sh @@ -48,7 +48,7 @@ function build() { -DURIPARSER_ENABLE_INSTALL=OFF \ -DURIPARSER_WARNINGS_AS_ERRORS=OFF " - DEFINES+="$DEFS " + export DEFINES="$DEFS " if [ "$TYPE" == "vs" ]; then echo "building uriparser $TYPE | $ARCH | $VS_VER | vs: Visual Studio ${VS_VER_GEN} -A ${PLATFORM}" echo "--------------------" @@ -76,57 +76,32 @@ function build() { elif [ "$TYPE" == "android" ]; then echo "Android " source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake - echo "Mkdir build" - mkdir -p build - echo "Mkdir build/${ABI}" - local BUILD_TO_DIR="build/${ABI}" - cd build - mkdir -p ${TYPE} - cd ${TYPE} - mkdir -p ${ABI} + mkdir -p "build_${TYPE}_${ABI}" + cd "build_${TYPE}_${ABI}" rm -f CMakeCache.txt *.a *.o - CFLAGS="" - export CMAKE_CFLAGS="$CFLAGS" - export CFLAGS="" - export CPPFLAGS="-fvisibility-inlines-hidden" - export CXXFLAGS="-fvisibility-inlines-hidden -Wno-implicit-function-declaration" - export CMAKE_LDFLAGS="$LDFLAGS" - export LDFLAGS="" - - cmake \ - ${DEFS} \ - -DCMAKE_TOOLCHAIN_FILE="$NDK_ROOT/build/cmake/android.toolchain.cmake" \ - -DANDROID_ABI=${ABI} \ - -DANDROID_NDK=${NDK_ROOT} \ - -DANDROID_STL=c++_shared \ + cmake .. ${DEFINES} \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ + -DPLATFORM=$PLATFORM \ -DANDROID_PLATFORM=${ANDROID_PLATFORM} \ - -DBUILD_SHARED_LIBS=OFF \ - -DCMAKE_C_COMPILER=${CC} \ - -DCMAKE_CXX_COMPILER_RANLIB=${RANLIB} \ - -DCMAKE_C_COMPILER_RANLIB=${RANLIB} \ - -DCMAKE_CXX_COMPILER_AR=${AR} \ - -DCMAKE_C_COMPILER_AR=${AR} \ - -DCMAKE_C_COMPILER=${CC} \ - -DCMAKE_CXX_COMPILER=${CXX} \ - -DCMAKE_C_FLAGS=${CFLAGS} \ - -DCMAKE_CXX_FLAGS=${CXXFLAGS} \ -DANDROID_ABI=${ABI} \ - -DCMAKE_CXX_STANDARD_LIBRARIES=${LIBS} \ - -DCMAKE_C_STANDARD_LIBRARIES=${LIBS} \ - -DCMAKE_STATIC_LINKER_FLAGS=${LDFLAGS} \ - -DANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ + -DURIPARSER_ENABLE_INSTALL=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ + -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c++${CPP_STANDARD} -frtti ${FLAG_RELEASE}" \ + -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -fvisibility-inlines-hidden -std=c${C_STANDARD} -Wno-implicit-function-declaration -frtti ${FLAG_RELEASE}" \ + -DENABLE_VISIBILITY=OFF \ -DCMAKE_VERBOSE_MAKEFILE=${VERBOSE_MAKEFILE} \ - -DANDROID_TOOLCHAIN=clang++ \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_SYSROOT=$SYSROOT \ - -B${ABI} \ - -G 'Unix Makefiles' ../.. - cd ${ABI} - make -j${PARALLEL_MAKE} VERBOSE=1 - make VERBOSE=1 - - cd ../../.. + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE + cmake --build . --config Release -j${PARALLEL_MAKE} --target install + cd .. elif [[ "$TYPE" =~ ^(osx|ios|tvos|xros|catos|watchos)$ ]]; then echo "int main(){return 0;}" >tool/uriparse.c @@ -210,7 +185,7 @@ function copy() { elif [ "$TYPE" == "android" ]; then cp -R include/uriparser/* $1/include/uriparser/ mkdir -p $1/lib/$TYPE/$ABI/ - cp -Rv build/$TYPE/$ABI/liburiparser.a $1/lib/$TYPE/$ABI/liburiparser.a + cp -Rv build_${TYPE}_${ABI}/liburiparser.a $1/lib/$TYPE/$ABI/liburiparser.a secure $1/lib/$TYPE/$ABI/liburiparser.a fi if [ -d "$1/license" ]; then diff --git a/apothecary/formulas/utf8.sh b/apothecary/formulas/utf8.sh index b55afca73..2ac778fa9 100755 --- a/apothecary/formulas/utf8.sh +++ b/apothecary/formulas/utf8.sh @@ -7,9 +7,9 @@ FORMULA_TYPES=("osx" "msys2" "linux" "vs" "ios" "watchos" "catos" "xros" "tvos" FORMULA_DEPENDS=() # define the version -VER=4.0.5 -VER_=4_0_5 -BUILD_ID=1 +VER=4.0.6 +VER_=4_0_6 +BUILD_ID=2 DEFINES="" # tools for git use @@ -20,10 +20,17 @@ GIT_TAG=v$VER function download() { . "$DOWNLOADER_SCRIPT" - downloader ${GIT_URL}/archive/refs/tags/v${VER}.zip - unzip -q v${VER}.zip - mv utfcpp-${VER} utf8 - rm v${VER}.zip + if [ "$TYPE" == "vs" ]; then + downloader ${GIT_URL}/archive/refs/tags/v${VER}.zip + unzip -q v${VER}.zip + mv utfcpp-${VER} utf8 + rm v${VER}.zip + else + downloader ${GIT_URL}//archive/refs/tags/v${VER}.tar.gz + tar -xf v${VER}.tar.gz + mv utfcpp-${VER} utf8 + rm -f v${VER}.tar.gz + fi } # prepare the build environment, executed inside the lib src dir diff --git a/apothecary/formulas/zlib/zlib.sh b/apothecary/formulas/zlib/zlib.sh index c4c04f8e9..2f6253ad3 100755 --- a/apothecary/formulas/zlib/zlib.sh +++ b/apothecary/formulas/zlib/zlib.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env /bash +#!/usr/bin/env bash # # A Massively Spiffy Yet Delicately Unobtrusive Compression Library # http://zlib.net/ @@ -8,7 +8,7 @@ FORMULA_DEPENDS=() # define the version VER=1.3.1 -BUILD_ID=1 +BUILD_ID=2 DEFINES="" # tools for git use @@ -100,30 +100,33 @@ function build() { cd .. elif [ "$TYPE" == "android" ]; then - # source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake + source $APOTHECARY_DIR/configure/android_configure.sh $ABI cmake mkdir -p "build_${TYPE}_${ABI}" cd "build_${TYPE}_${ABI}" rm -f CMakeCache.txt *.a *.o - # export CFLAGS="$CFLAGS $FLAG_RELEASE" - # export CXXFLAGS="$CFLAGS $FLAG_RELEASE" DEFINES="-DLIBRARY_SUFFIX=${ARCH} \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_STANDARD=${C_STANDARD} \ - -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ - -DCMAKE_CXX_STANDARD_REQUIRED=ON \ - -DCMAKE_CXX_EXTENSIONS=OFF \ - -DBUILD_SHARED_LIBS=OFF" + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_STANDARD=${C_STANDARD} \ + -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DBUILD_SHARED_LIBS=OFF" cmake .. ${DEFINES} \ -DCMAKE_TOOLCHAIN_FILE=$APOTHECARY_DIR/toolchains/android.toolchain.cmake \ -DPLATFORM=$PLATFORM \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ - -D ANDROID_ABI=${ABI} \ - -D ANDROID_NATIVE_API_LEVEL=${ANDROID_API} \ - -D ANDROID_TOOLCHAIN=clang \ + -DANDROID_ABI=${ABI} \ + -DANDROID_API=${ANDROID_API} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_NDK_ROOT=$ANDROID_NDK_ROOT \ -DENABLE_VISIBILITY=OFF \ + -DCMAKE_PREFIX_PATH="${LIBS_ROOT}" \ + -DCMAKE_INSTALL_PREFIX=Release \ + -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ + -DCMAKE_INSTALL_INCLUDEDIR=include \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE cmake --build . --config Release -j${PARALLEL_MAKE} --target install @@ -166,12 +169,12 @@ function build() { cd "build_${TYPE}_${ARCH}" rm -f CMakeCache.txt *.a *.o *.so DEFINES="-DLIBRARY_SUFFIX=${ARCH} \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_STANDARD=${C_STANDARD} \ - -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ - -DCMAKE_CXX_STANDARD_REQUIRED=ON \ - -DCMAKE_CXX_EXTENSIONS=OFF \ - -DBUILD_SHARED_LIBS=OFF" + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_STANDARD=${C_STANDARD} \ + -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DBUILD_SHARED_LIBS=OFF" cmake .. ${DEFINES} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 -Iinclude ${FLAG_RELEASE}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 -Iinclude ${FLAG_RELEASE}" \ @@ -195,16 +198,16 @@ function build() { fi echoVerbose "building $TYPE | $ARCH " echoVerbose "--------------------" - mkdir -p "build_${TYPE}_${ARCH}" - cd "build_${TYPE}_${ARCH}" + mkdir -p "build_${TYPE}_${PLATFORM}" + cd "build_${TYPE}_${PLATFORM}" rm -f CMakeCache.txt *.a *.o *.so DEFINES="-DLIBRARY_SUFFIX=${ARCH} \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_STANDARD=${C_STANDARD} \ - -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ - -DCMAKE_CXX_STANDARD_REQUIRED=ON \ - -DCMAKE_CXX_EXTENSIONS=OFF \ - -DBUILD_SHARED_LIBS=OFF" + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_C_STANDARD=${C_STANDARD} \ + -DCMAKE_CXX_STANDARD=${CPP_STANDARD} \ + -DCMAKE_CXX_STANDARD_REQUIRED=ON \ + -DCMAKE_CXX_EXTENSIONS=OFF \ + -DBUILD_SHARED_LIBS=OFF" cmake .. ${DEFINES} \ -DCMAKE_CXX_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ -DCMAKE_C_FLAGS="-DUSE_PTHREADS=1 ${FLAG_RELEASE}" \ @@ -218,6 +221,7 @@ function build() { -DCMAKE_INSTALL_PREFIX=Release \ -DCMAKE_INCLUDE_OUTPUT_DIRECTORY=include \ -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_MINIMUM_REQUIRED_VERSION=3.22 \ -DENABLE_VISIBILITY=OFF \ -DCMAKE_INSTALL_INCLUDEDIR=include cmake --build . --target install --config Release -j${PARALLEL_MAKE} @@ -265,6 +269,17 @@ function copy() { cp -v "build_${TYPE}_${ABI}/Release/lib/libz.a" $1/lib/$TYPE/$ABI/zlib.a cp -RT "build_${TYPE}_${ABI}/Release/include/" $1/include secure $1/lib/$TYPE/$ABI/zlib.a + + cp -v "build_${TYPE}_$PLATFORM/Release/share/pkgconfig/zlib.pc" $1/lib/$TYPE/$ABI/zlib.pc + + PKG_FILE="$1/lib/$TYPE/$PLATFORM/zlib.pc" + sed -i.bak "s|^prefix=.*|prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^exec_prefix=.*|exec_prefix=${1}|" "$PKG_FILE" + sed -i.bak "s|^libdir=.*|libdir=${1}/lib/${TYPE}/${ABI}/|" "$PKG_FILE" + sed -i.bak "s|^includedir=.*|includedir=${1}/include|" "$PKG_FILE" + rm -v "$PKG_FILE.bak" + export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}:$1/lib/$TYPE/$ABI" + elif [ "$TYPE" == "emscripten" ]; then cp -Rv "build_${TYPE}_${PLATFORM}/Release/include/"* $1/include/ mkdir -p $1/lib/$TYPE/$PLATFORM diff --git a/apothecary/ostype.sh b/apothecary/ostype.sh index 69e2f4997..def355998 100755 --- a/apothecary/ostype.sh +++ b/apothecary/ostype.sh @@ -6,6 +6,8 @@ function lowercase() { } OS=$(lowercase $(uname)) +DISTRO="" +DEVICE="" if [ "$OS" == "darwin" ]; then OS="osx" @@ -15,18 +17,51 @@ elif [ "${OS:0:5}" == "mingw" -o "$OS" == "msys_nt-6.3" ]; then OS="msys2" elif [ "$OS" == "linux" ]; then ARCH=$(uname -m) - if [ "$ARCH" == "i386" -o "$ARCH" == "i686" ]; then - OS="linux" - elif [ "$ARCH" == "x86_64" ]; then - OS="linux64" - elif [ "$ARCH" == "armv6l" ]; then - OS="linuxarmv6l" - elif [ "$ARCH" == "armv7l" ]; then - OS="linuxarmv7l" + if [[ -f /etc/os-release ]]; then + . /etc/os-release + case "$ID" in + ubuntu) + export DISTRO="ubuntu" + ;; + raspbian) + export DISTRO="raspios" + ;; + debian) + if grep -q "Raspberry Pi" /proc/cpuinfo; then + export DISTRO="raspios" + else + export DISTRO="debian" + fi + ;; + *) + export DISTRO="$ID" + ;; + esac + fi + if [[ "$DISTRO" == "raspios" ]]; then + if [[ -f /proc/cpuinfo ]]; then + REVISION=$(grep "^Revision" /proc/cpuinfo | awk '{print $3}') + case "$REVISION" in + a02082|a22082|a32082|a52082) + export DEVICE="Raspberry Pi 3" + ;; + a03111|b03111|b03112|b03114) + export DEVICE="Raspberry Pi 4" + ;; + b03140|c03140|d03140|c03145) + export DEVICE="Raspberry Pi 5" + ;; + *) + export DEVICE="Unknown Raspberry Pi Model" + ;; + esac + echo "$DEVICE" + else + export DEVICE="Unknown (no /proc/cpuinfo)" + fi else - # We don't know this one, but we will try to make a reasonable guess. - OS="linux"$ARCH + export DEVICE="Not a Raspberry Pi" fi fi -echo "$OS" +echo "$OS ${DISTRO} ${DEVICE}" diff --git a/apothecary/toolchains/android.toolchain.cmake b/apothecary/toolchains/android.toolchain.cmake index dcc106ff4..10af96f15 100644 --- a/apothecary/toolchains/android.toolchain.cmake +++ b/apothecary/toolchains/android.toolchain.cmake @@ -1,5 +1,5 @@ # Android Toolchain CMake Configuration -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.14) # Add additional flags or settings if needed set(CMAKE_ANDROID_STL_TYPE "c++_shared") # Adjust STL type if needed @@ -15,54 +15,93 @@ set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD ${CPP_STANDARD}) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# User-defined inputs for ABI and NDK path + if(NOT DEFINED ANDROID_ABI) - message(FATAL_ERROR "ANDROID_ABI must be specified (e.g., armeabi-v7a, arm64-v8a, x86, x86_64)") + if(DEFINED ENV{ANDROID_ABI}) + set(ANDROID_ABI $ENV{ANDROID_ABI}) + else() + message(FATAL_ERROR "ANDROID_ABI must be specified (e.g., armeabi-v7a, arm64-v8a, x86, x86_64)") + endif() +endif() + +if(NOT DEFINED ANDROID_NDK_ROOT) + if(DEFINED ENV{ANDROID_NDK_ROOT}) + set(ANDROID_NDK_ROOT $ENV{ANDROID_NDK_ROOT}) + else() + message(FATAL_ERROR "ANDROID_NDK_ROOT must be specified as the path to the Android NDK") + endif() endif() -if(NOT DEFINED NDK_ROOT) - message(FATAL_ERROR "NDK_ROOT must be specified as the path to the Android NDK") +if(NOT DEFINED ANDROID_API) + if(DEFINED ENV{ANDROID_API}) + set(ANDROID_API $ENV{ANDROID_API}) + else() + message(FATAL_ERROR "ANDROID_API must be specified as the path to the ANDROID_API") + endif() endif() +set(ANDROID_NATIVE_API_LEVEL ${ANDROID_API}) # Detect Host Platform -if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(HOST_PLATFORM "darwin-x86_64") -elseif(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - set(HOST_PLATFORM "windows-x86_64") -else() - set(HOST_PLATFORM "linux-x86_64") +if(NOT DEFINED HOST_PLATFORM) + if(CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin") + if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "arm64") + set(HOST_PLATFORM "darwin-arm64") + else() + set(HOST_PLATFORM "darwin-x86_64") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Windows") + set(HOST_PLATFORM "windows-x86_64") # Windows ARM64 is rare, adjust if needed + elseif(CMAKE_HOST_SYSTEM_NAME MATCHES "Linux") + if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64") + set(HOST_PLATFORM "linux-arm64") + else() + set(HOST_PLATFORM "linux-x86_64") + endif() + else() + message(FATAL_ERROR "Unsupported host platform: ${CMAKE_HOST_SYSTEM_NAME} (${CMAKE_HOST_SYSTEM_PROCESSOR})") + endif() endif() +message(STATUS "Android ABI: ${ANDROID_ABI}") message(STATUS "Detected Host Platform: ${HOST_PLATFORM}") # NDK Configuration set(TOOLCHAIN_TYPE "llvm") -set(TOOLCHAIN "${NDK_ROOT}/toolchains/${TOOLCHAIN_TYPE}/prebuilt/${HOST_PLATFORM}") + +set(TOOLCHAIN "${ANDROID_NDK_ROOT}/toolchains/${TOOLCHAIN_TYPE}/prebuilt/${HOST_PLATFORM}") set(SYSROOT "${TOOLCHAIN}/sysroot") # ABI-specific configuration if(ANDROID_ABI STREQUAL "armeabi-v7a") set(MACHINE "armv7") - set(ANDROID_PREFIX "arm-linux-androideabi") + set(ANDROID_PREFIX "armv7a-linux-androideabi") + set(ANDROID_TARGET "armv7a-none-linux-androideabi${ANDROID_NATIVE_API_LEVEL}") set(CMAKE_ANDROID_ARM_MODE ON) set(CMAKE_ANDROID_ARM_NEON ON) - set(CMAKE_SYSTEM_PROCESSOR "arm") - set(CMAKE_C_FLAGS "-mfpu=neon -mfloat-abi=hard") - set(CMAKE_CXX_FLAGS "-mfpu=neon -mfloat-abi=hard") + set(CMAKE_SYSTEM_PROCESSOR "armv7-a") + set(CMAKE_C_FLAGS "-mfpu=neon -mfloat-abi=softfp -O3 -ffast-math -funroll-loops -funsafe-math-optimizations --target=${ANDROID_TARGET}") + set(CMAKE_CXX_FLAGS "-mfpu=neon -mfloat-abi=softfp -O3 -ffast-math -funroll-loops -funsafe-math-optimizations --target=${ANDROID_TARGET}") elseif(ANDROID_ABI STREQUAL "arm64-v8a") set(MACHINE "arm64") set(ANDROID_PREFIX "aarch64-linux-android") + set(ANDROID_TARGET "aarch64-none-linux-android${ANDROID_NATIVE_API_LEVEL}") set(CMAKE_SYSTEM_PROCESSOR "aarch64") - set(CMAKE_ANDROID_ARM_MODE ON) - set(CMAKE_ANDROID_ARM_NEON ON) + set(CMAKE_C_FLAGS "-O3 -ffast-math -funroll-loops -funsafe-math-optimizations --target=${ANDROID_TARGET}") + set(CMAKE_CXX_FLAGS "-O3 -ffast-math -funroll-loops -funsafe-math-optimizations --target=${ANDROID_TARGET}") elseif(ANDROID_ABI STREQUAL "x86") set(MACHINE "i686") set(ANDROID_PREFIX "i686-linux-android") - set(CMAKE_SYSTEM_PROCESSOR "x86") + set(ANDROID_TARGET "i686-none-linux-android${ANDROID_NATIVE_API_LEVEL}") + set(CMAKE_SYSTEM_PROCESSOR "i686") + set(CMAKE_C_FLAGS "-msse4.2 -mavx -O3 -ffast-math -funroll-loops") + set(CMAKE_CXX_FLAGS "-msse4.2 -mavx -O3 -ffast-math -funroll-loops") elseif(ANDROID_ABI STREQUAL "x86_64") set(MACHINE "x86_64") set(ANDROID_PREFIX "x86_64-linux-android") + set(ANDROID_TARGET "x86_64-none-linux-android${ANDROID_NATIVE_API_LEVEL}") set(CMAKE_SYSTEM_PROCESSOR "x86_64") + set(CMAKE_C_FLAGS "-msse4.2 -mavx -O3 -ffast-math -funroll-loops --target=${ANDROID_TARGET}") + set(CMAKE_CXX_FLAGS "-msse4.2 -mavx -O3 -ffast-math -funroll-loops --target=${ANDROID_TARGET}") else() message(FATAL_ERROR "Unsupported ANDROID_ABI: ${ANDROID_ABI}") endif() @@ -71,10 +110,13 @@ message(STATUS "Configuring for ABI: ${ANDROID_ABI}") message(STATUS "Machine: ${MACHINE}") message(STATUS "Android Prefix: ${ANDROID_PREFIX}") +message(STATUS "CMAKE_C_COMPILER: ${TOOLCHAIN}/bin/${ANDROID_PREFIX}${CMAKE_ANDROID_API}${ANDROID_API}-clang") +message(STATUS "CMAKE_CXX_COMPILER: ${TOOLCHAIN}/bin/${ANDROID_PREFIX}${CMAKE_ANDROID_API}${ANDROID_API}-clang++") + # Set compilers -set(CMAKE_C_COMPILER "${TOOLCHAIN}/bin/${ANDROID_PREFIX}${CMAKE_ANDROID_API}-clang") -set(CMAKE_CXX_COMPILER "${TOOLCHAIN}/bin/${ANDROID_PREFIX}${CMAKE_ANDROID_API}-clang++") -set(CMAKE_LINKER "${TOOLCHAIN}/bin/${ANDROID_PREFIX}${CMAKE_ANDROID_API}-ld") +set(CMAKE_C_COMPILER "${TOOLCHAIN}/bin/${ANDROID_PREFIX}${CMAKE_ANDROID_API}${ANDROID_API}-clang") +set(CMAKE_CXX_COMPILER "${TOOLCHAIN}/bin/${ANDROID_PREFIX}${CMAKE_ANDROID_API}${ANDROID_API}-clang++") +set(CMAKE_LINKER "${TOOLCHAIN}/bin/ld.lld") # Paths set(CMAKE_SYSROOT ${SYSROOT}) @@ -90,20 +132,23 @@ set(CMAKE_LIBRARY_PATH "${SYSROOT}/usr/lib/${ANDROID_PREFIX}/${CMAKE_ANDROID_API # Compiler Binary set(BIN_PREFIX "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_C_COMPILER ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-gcc PATHS "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_CXX_COMPILER ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-g++ PATHS "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_LINKER ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-ld PATHS "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_AR ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-ar PATHS "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_NM ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-nm PATHS "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_RANLIB ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-ranlib PATHS "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_STRIP ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-strip PATHS "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_OBJCOPY ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-objcopy PATHS "${TOOLCHAIN_ROOT}/bin/") -find_program(CMAKE_OBJDUMP ${CMAKE_SYSTEM_PROCESSOR}-linux-gnu-objdump PATHS "${TOOLCHAIN_ROOT}/bin/") +#find_program(CMAKE_C_COMPILER clang PATHS "${TOOLCHAIN_ROOT}/bin/") +##find_program(CMAKE_CXX_COMPILER clang++ PATHS "${TOOLCHAIN_ROOT}/bin/") +#find_program(CMAKE_LINKER ld.lld PATHS "${TOOLCHAIN_ROOT}/bin/") +find_program(CMAKE_AR llvm-ar PATHS "${TOOLCHAIN_ROOT}/bin/") +find_program(CMAKE_NM llvm-nm PATHS "${TOOLCHAIN_ROOT}/bin/") +find_program(CMAKE_RANLIB llvm-ranlib PATHS "${TOOLCHAIN_ROOT}/bin/") +find_program(CMAKE_STRIP llvm-strip PATHS "${TOOLCHAIN_ROOT}/bin/") +find_program(CMAKE_OBJCOPY llvm-objcopy PATHS "${TOOLCHAIN_ROOT}/bin/") +find_program(CMAKE_OBJDUMP llvm-objdump PATHS "${TOOLCHAIN_ROOT}/bin/") # Toolchain Debug Output -message(STATUS "NDK Root: ${NDK_ROOT}") +message(STATUS "---Android TOOLCHAIN CONFIGURATION") +message(STATUS "Host Platform: ${HOST_PLATFORM}") +message(STATUS "ANDROID_NDK_ROOT : ${ANDROID_NDK_ROOT}") message(STATUS "Sysroot: ${SYSROOT}") -message(STATUS "Toolchain Path: ${TOOLCHAIN}") +message(STATUS "Toolchain: ${TOOLCHAIN}") +message(STATUS "ABI: ${ANDROID_ABI}") message(STATUS "C Compiler: ${CMAKE_C_COMPILER}") message(STATUS "C++ Compiler: ${CMAKE_CXX_COMPILER}") message(STATUS "Linker: ${CMAKE_LINKER}") @@ -111,7 +156,7 @@ message(STATUS "Linker: ${CMAKE_LINKER}") # Finalize toolchain settings set(CMAKE_SYSTEM_NAME "Android") set(CMAKE_SYSTEM_VERSION ${CMAKE_ANDROID_API}) -set(CMAKE_ANDROID_NDK ${NDK_ROOT}) +set(CMAKE_ANDROID_NDK ${ANDROID_NDK_ROOT}) if(NOT EXISTS ${CMAKE_C_COMPILER}) message(FATAL_ERROR "C Compiler not found: ${CMAKE_C_COMPILER}") diff --git a/apothecary/toolchains/linux64.meson.ini b/apothecary/toolchains/linux64.meson.ini new file mode 100644 index 000000000..d2ab959ec --- /dev/null +++ b/apothecary/toolchains/linux64.meson.ini @@ -0,0 +1,29 @@ +[host_machine] +system = 'linux' +cpu_family = 'x86_64' +cpu = 'x86_64' +endian = 'little' + +[binaries] +c = 'gcc-14' +cpp = 'g++-14' +ar = 'x86_64-linux-gnu-ar' +strip = 'x86_64-linux-gnu-strip' +pkgconfig = 'x86_64-linux-gnu-pkg-config' +ld = 'x86_64-linux-gnu-ld' +nm = 'x86_64-linux-gnu-nm' +ranlib = 'x86_64-linux-gnu-ranlib' +objcopy = 'x86_64-linux-gnu-objcopy' +objdump = 'x86_64-linux-gnu-objdump' + +[properties] +sys_root = '/' +c_args = ['--sysroot=/', '-fPIC', '-O3', '-Wall', '-Wextra', '-march=x86-64', '-mtune=generic', '-Wl,-rpath-link,/', '-L/lib/', '-L/lib64/', '-L/lib/x86_64-linux-gnu'] +cpp_args = ['--sysroot=/', '-fPIC', '-O3', '-Wall', '-Wextra', '-std=c++17', '-march=x86-64', '-mtune=generic', '-Wl,-rpath-link,/', '-L/lib/', '-L/lib64/', '-L/lib/x86_64-linux-gnu'] +c_link_args = ['-fPIE', '-pie', '-Wl,-rpath-link,/', '-L/lib/', '-L/lib64/', '-L/lib/x86_64-linux-gnu' , '-lm' ] +cpp_link_args = ['-fPIE', '-pie', '-Wl,-rpath-link,/', '-L/lib/', '-L/lib64/', '-L/lib/x86_64-linux-gnu' , '-lm' ] + +[build_options] +c_std = 'c17' +cpp_std = 'c++17' +default_library = 'static' diff --git a/apothecary/toolchains/linuxarm64.meson.ini b/apothecary/toolchains/linuxarm64.meson.ini new file mode 100644 index 000000000..aba59b5d7 --- /dev/null +++ b/apothecary/toolchains/linuxarm64.meson.ini @@ -0,0 +1,29 @@ +[host_machine] +system = 'linux' +cpu_family = 'native' +cpu = 'aarch64' +endian = 'little' + +[binaries] +c = 'gcc' +cpp = 'g++' +ar = 'ar' +strip = 'strip' +pkg-config = 'pkg-config' +ld = 'ld' +nm = 'nm' +ranlib = 'ranlib' +objcopy = 'objcopy' +objdump = 'objdump' + +[properties] +sys_root = '/' +c_args = ['--sysroot=/', '-I/usr/include', '-I/usr/include/aarch64-linux-gnu', '-fPIC', '-O3', '-Wall', '-Wextra', '-march=armv8-a+simd'] +cpp_args = ['--sysroot=/', '-I/usr/include', '-I/usr/include/aarch64-linux-gnu', '-fPIC', '-O3', '-Wall', '-Wextra', '-std=c++17', '-march=armv8-a+simd'] +c_link_args = ['-fPIE', '-pie', '-Wl,-rpath-link,/', '-L/usr/lib', '-L/lib', '-L/usr/lib/aarch64-linux-gnu', '-L/lib/aarch64-linux-gnu', '-lm'] +cpp_link_args = ['-fPIE', '-pie', '-Wl,-rpath-link,/', '-L/usr/lib', '-L/lib', '-L/usr/lib/aarch64-linux-gnu', '-L/lib/aarch64-linux-gnu', '-lm'] + +[build_options] +c_std = 'c17' +cpp_std = 'c++17' +default_library = 'static' diff --git a/scripts/android/install.sh b/scripts/android/install.sh index 10e7f70fd..8100b15a9 100755 --- a/scripts/android/install.sh +++ b/scripts/android/install.sh @@ -5,6 +5,7 @@ APOTHECARY_PATH=$( pwd -P )/../../apothecary +sudo apt-get update sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils libtool dos2unix sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev ccache sudo aptitude install -y gperf diff --git a/scripts/downloader.sh b/scripts/downloader.sh index b31f1f8c2..780ed0738 100755 --- a/scripts/downloader.sh +++ b/scripts/downloader.sh @@ -1,5 +1,5 @@ #!/bin/bash -VERSION=4.5.0 +VERSION=4.5.1 printDownloaderHelp() { cat </dev/null 2>&1; then CURL_INSTALLED=1 - CURL_VERSION=$(curl -V | head -n 1 | awk '{print $2}') + CURL_VERSION=$(curl -V | head -n 1 | cut -d ' ' -f2) CURL_MIN=7.71.0 if [ "$(printf '%s\n' "$CURL_MIN" "$CURL_VERSION" | sort -V | head -n1)" = "$CURL_MIN" ] && [ "$CURL_VERSION" != "$CURL_MIN" ]; then if [[ $CURL == 1 && $CURL_INSTALLED == 1 ]] && [[ $WGET2 == 0 ]]; then diff --git a/scripts/linux/aarch64/install.sh b/scripts/linux/aarch64/install.sh deleted file mode 100755 index a0519361f..000000000 --- a/scripts/linux/aarch64/install.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash -# set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd $SCRIPT_DIR -APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" - -sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils -sudo aptitude install -y gperf -sudo apt-get update && sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev -sudo apt-get install -y ccache -sudo apt-get install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu -sudo apt-get install \ - libboost-iostreams1.83.0:arm64 \ - libcwidget4:arm64 \ - libsigc++-2.0-0v5:arm64 \ - libxapian30:arm64 \ - libasound2-plugins:arm64 \ - libosmesa6:arm64 \ - libpcsclite1:arm64 \ - libspeexdsp1:arm64 \ - libwine:arm64 \ - libxkbregistry0:arm64 \ - libz-mingw-w64:arm64 \ - wine:arm64 \ - wine64:arm64 \ - wget2:arm64 \ - make:arm64 \ - libjack-jackd2-0:arm64 \ - libjack-jackd2-dev:arm64 \ - freeglut3-dev:arm64 \ - libasound2-dev:arm64 \ - libxmu-dev:arm64 \ - libxxf86vm-dev:arm64 \ - g++:arm64 \ - libgl1-mesa-dev:arm64 \ - libglu1-mesa-dev:arm64 \ - libraw1394-dev:arm64 \ - libudev-dev:arm64 \ - libdrm-dev:arm64 \ - libglew-dev:arm64 \ - libopenal-dev:arm64 \ - libsndfile1-dev:arm64 \ - libfreeimage-dev:arm64 \ - libcairo2-dev:arm64 \ - libfreetype6-dev:arm64 \ - libpulse-dev:arm64 \ - libusb-1.0-0-dev:arm64 \ - libgtk2.0-dev:arm64 \ - libopencv-dev:arm64 \ - libassimp-dev:arm64 \ - librtaudio-dev:arm64 \ - gdb:arm64 \ - libglfw3-dev:arm64 \ - libfftw3-dev:arm64 \ - liburiparser-dev:arm64 \ - libpugixml-dev:arm64 \ - libgconf-2-4:arm64 \ - libgtk2.0-0:arm64 \ - libpoco-dev:arm64 \ - libxcursor-dev:arm64 \ - libxi-dev:arm64 \ - libxinerama-dev:arm64 \ - libgstreamer1.0-dev:arm64 \ - libgstreamer-plugins-base1.0-dev:arm64 \ - gstreamer1.0-libav:arm64 \ - gstreamer1.0-pulseaudio:arm64 \ - gstreamer1.0-x:arm64 \ - gstreamer1.0-plugins-bad:arm64 \ - gstreamer1.0-alsa:arm64 \ - gstreamer1.0-plugins-base:arm64 \ - gstreamer1.0-plugins-good:arm64 diff --git a/scripts/linux/arm64/install.sh b/scripts/linux/arm64/install.sh index fc441ac8e..635cfa92a 100755 --- a/scripts/linux/arm64/install.sh +++ b/scripts/linux/arm64/install.sh @@ -45,13 +45,6 @@ echoDots() { echo "GCC Version: [$GCC]" -sudo apt-get update -sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu -sudo apt-get update -sudo apt-get install -y qemu-user-static binfmt-support -if command -v docker &>/dev/null; then - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -fi if [[ "$GCC" =~ ^gcc(8|9|10|11|12|13)$ ]]; then GCC_VERSION=${BASH_REMATCH[1]} sudo apt update @@ -117,80 +110,30 @@ else echo "GCC version not specified on OPT env var, set one of gcc14, gcc6 or gcc13" fi +echo "--- Installing extra depends --- " + sudo apt-get -y install libasound-dev libjack-dev libpulse-dev oss4-dev #rtaudio +# sudo apt-get update && sudo apt-get install -y autoconf libtool automake dos2unix +# sudo apt-get update && sudo apt-get install -y cmake build-essential +# sudo apt-get update && sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev cmake build-essential libc6-dev +# sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils libtool dos2unix +# sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev ccache +# sudo apt-get install -y gperf -sudo apt-get update && sudo apt-get install -y autoconf libtool automake dos2unix -sudo apt-get update && sudo apt-get install -y cmake build-essential -sudo apt-get update && sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev cmake build-essential libc6-dev +# dpkg -L gcc-aarch64-linux-gnu -sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils libtool dos2unix -sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev ccache -sudo aptitude install -y gperf +sudo apt-get install -y ccache +# sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu dpkg -L gcc-aarch64-linux-gnu -sudo apt-get install -y ccache -sudo apt-get install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu -sudo apt-get install \ - libboost-iostreams1.83.0:arm64 \ - libcwidget4:arm64 \ - libsigc++-2.0-0v5:arm64 \ - libxapian30:arm64 \ - libasound2-plugins:arm64 \ - libosmesa6:arm64 \ - libpcsclite1:arm64 \ - libspeexdsp1:arm64 \ - libwine:arm64 \ - libxkbregistry0:arm64 \ - libz-mingw-w64:arm64 \ - wine:arm64 \ - wine64:arm64 \ - wget2:arm64 \ - make:arm64 \ - libjack-jackd2-0:arm64 \ - libjack-jackd2-dev:arm64 \ - freeglut3-dev:arm64 \ - libasound2-dev:arm64 \ - libxmu-dev:arm64 \ - libxxf86vm-dev:arm64 \ - g++:arm64 \ - libgl1-mesa-dev:arm64 \ - libglu1-mesa-dev:arm64 \ - libraw1394-dev:arm64 \ - libudev-dev:arm64 \ - libdrm-dev:arm64 \ - libglew-dev:arm64 \ - libopenal-dev:arm64 \ - libsndfile1-dev:arm64 \ - libfreeimage-dev:arm64 \ - libcairo2-dev:arm64 \ - libfreetype6-dev:arm64 \ - libpulse-dev:arm64 \ - libusb-1.0-0-dev:arm64 \ - libgtk2.0-dev:arm64 \ - libopencv-dev:arm64 \ - libassimp-dev:arm64 \ - librtaudio-dev:arm64 \ - gdb:arm64 \ - libglfw3-dev:arm64 \ - libfftw3-dev:arm64 \ - liburiparser-dev:arm64 \ - libpugixml-dev:arm64 \ - libgconf-2-4:arm64 \ - libgtk2.0-0:arm64 \ - libpoco-dev:arm64 \ - libxcursor-dev:arm64 \ - libxi-dev:arm64 \ - libxinerama-dev:arm64 \ - libgstreamer1.0-dev:arm64 \ - libgstreamer-plugins-base1.0-dev:arm64 \ - gstreamer1.0-libav:arm64 \ - gstreamer1.0-pulseaudio:arm64 \ - gstreamer1.0-x:arm64 \ - gstreamer1.0-plugins-bad:arm64 \ - gstreamer1.0-alsa:arm64 \ - gstreamer1.0-plugins-base:arm64 \ - gstreamer1.0-plugins-good:arm64 +echo "--- Output usr/lib/* --- " +if [ -d "/usr/lib/x86_64-linux-gnu" ]; then + find /usr/lib/x86_64-linux-gnu -name "libGL*" +fi +if [ -d "/usr/lib/x86_64-linux-gnu" ]; then + find /usr/lib/x86_64-linux-gnu -name "libGL*" +fi # Download the installer script # CMAKE_VERSION=3.30.0 diff --git a/scripts/linux/arm64/setup.sh b/scripts/linux/arm64/setup.sh index 71c1a73c4..706b04f7b 100755 --- a/scripts/linux/arm64/setup.sh +++ b/scripts/linux/arm64/setup.sh @@ -1,208 +1,185 @@ #!/usr/bin/env bash set -e -# trap any script errors and exit -trap "trapError" ERR - -trapError() { - echo - echo " ^ Received error ^" +echo "=== Linux ARM64 cross setup ===" +lsb_release -a + +sudo apt update -y +sudo apt install -y \ + git \ + cmake \ + gawk \ + pkgconf \ + build-essential \ + ninja-build \ + automake \ + autoconf \ + flex \ + xz-utils \ + crossbuild-essential-armhf \ + crossbuild-essential-arm64 + +# sudo apt-mark hold \ +# git \ +# cmake \ +# gawk \ +# pkgconf \ +# build-essential \ +# ninja-build \ +# automake \ +# autoconf \ +# flex \ +# xz-utils \ +# crossbuild-essential-armhf \ +# crossbuild-essential-arm64 + +sudo apt install -y \ + python3-minimal \ + python3-numpy + +# if [[ "$(uname -m)" == "x86_64" ]]; then +# wget https://ftp.gnu.org/gnu/gawk/gawk-5.3.1.tar.xz +# tar --xz -xf gawk-5.3.1.tar.xz # Explicitly tell tar to handle xz +# cd gawk-5.3.1 +# ./configure +# make +# sudo make install +# echo 'export LD_LIBRARY_PATH=/usr/local/lib/gawk:$LD_LIBRARY_PATH' >> ~/.zshrc +# source ~/.zshrc +# fi + +# Ensure the script is run as root +if [[ $EUID -ne 0 ]]; then + echo "This script must be run as root." exit 1 -} - -isRunning() { - if [ “$(uname)” == “Linux” ]; then - if [ -d /proc/$1 ]; then - return 0 - else - return 1 - fi - else - number=$(ps aux | sed -E "s/[^ ]* +([^ ]*).*/\1/g" | grep ^$1$ | wc -l) - - if [ $number -gt 0 ]; then - return 0 - else - return 1 - fi - fi -} +fi -echoDots() { - while isRunning $1; do - for i in $(seq 1 10); do - echo -ne . - if ! isRunning $1; then - printf "\r" - return - fi - sleep 2 - done - printf "\r " - printf "\r" - done -} +# Ubuntu version detection +UBUNTU_VERSION=$(lsb_release -cs) # e.g., "lunar" for Ubuntu 23.04 -echo "GCC Version: [$GCC]" -sudo apt-get update -sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu -sudo apt-get update -sudo apt-get install -y qemu-user-static binfmt-support -if command -v docker &>/dev/null; then - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes +# Check for valid Ubuntu version +if [[ -z "$UBUNTU_VERSION" ]]; then + echo "Error: Could not detect Ubuntu version. Ensure lsb-release is installed." + exit 1 fi -if [[ "$GCC" =~ ^gcc(8|9|10|11|12|13)$ ]]; then - GCC_VERSION=${BASH_REMATCH[1]} - sudo apt update - sudo apt install software-properties-common - sudo add-apt-repository ppa:ubuntu-toolchain-r/test - sudo apt update - sudo apt install -y --allow-unauthenticated gcc-${GCC_VERSION} g++-${GCC_VERSION} - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCC_VERSION} ${GCC_VERSION} \ - --slave /usr/bin/g++ g++ /usr/bin/g++-${GCC_VERSION} - sudo apt-get install -y gperf coreutils libxrandr-dev libxinerama-dev libx11-dev libxcursor-dev libxi-dev libc6-dev - sudo update-alternatives --config gcc - gcc --version - g++ -v -elif [ "$GCC" == "gcc14" ]; then - # https://gcc.gnu.org/gcc-14/changes.html - sudo apt update - sudo apt install -y software-properties-common - # Add the Ubuntu Toolchain PPA for newer GCC versions - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - sudo apt update - sudo apt install -y --allow-unauthenticated gcc-14 g++-14 - # Configure alternatives to set GCC 14 as default - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 14 \ - --slave /usr/bin/g++ g++ /usr/bin/g++-14 - sudo update-alternatives --config gcc # GCC 14 as the default - gcc --version - g++ -v -elif [ "$GCC" == "gcc15" ]; then - # https://gcc.gnu.org/gcc-15/changes.html - - sudo apt update - sudo apt install -y build-essential flex bison libgmp-dev libmpc-dev libmpfr-dev texinfo wget - sudo apt-get install -y gperf coreutils libxrandr-dev libxinerama-dev libx11-dev libxcursor-dev libxi-dev libc6-dev - - wget https://ftp.gnu.org/gnu/gcc/gcc-15.0.0/gcc-15.0.0.tar.gz - tar -xvzf gcc-15.0.0.tar.gz - cd gcc-15.0.0 - - mkdir build - cd build - - ../configure --prefix=/usr/local/gcc-15 --enable-languages=c,c++ --disable-multilib - - make -j - sudo make install - - echo "export PATH=/usr/local/gcc-15/bin:\$PATH" >>~/.bashrc - source ~/.bashrc - # sudo apt update - # sudo apt install -y software-properties-common - # # Add the Ubuntu Toolchain PPA for newer GCC versions - # sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test - # sudo apt update - # sudo apt install -y gcc-15 g++-15 # Install experimental GCC and G++ version 15 - # # Configure alternatives to set GCC 15 as default - # sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-15 15 \ - # --slave /usr/bin/g++ g++ /usr/bin/g++-15 - # sudo update-alternatives --config gcc # GCC 15 as the default - # gcc --version - # g++ -v - +if [[ "$(uname -m)" == "aarch64" ]]; then + echo "Native aarch64 detected. No need to generate ARM64 /apt/sources. edits" else - echo "GCC version not specified on OPT env var, set one of gcc14, gcc6 or gcc13" +# Define output file path +OUTPUT_FILE="/etc/apt/sources.list.d/arm64.sources" +echo "making sources file arm64" + +# Generate the .sources content +cat < $OUTPUT_FILE +Types: deb +URIs: http://ports.ubuntu.com/ubuntu-ports/ +Suites: $UBUNTU_VERSION $UBUNTU_VERSION-updates $UBUNTU_VERSION-backports $UBUNTU_VERSION-security +Components: main restricted universe multiverse +Architectures: arm64 armhf +Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg +EOF + +# Output the result +echo "Generated ARM64 .sources file at $OUTPUT_FILE" + + +SOURCE_FILE="/etc/apt/sources.list.d/ubuntu.sources" +awk ' +/^Types: deb/ { + print $0 + getline nextLine + if (nextLine !~ /^Architectures:/) { + print "Architectures: amd64" + } + print nextLine + next +} +{ print $0 } +' "$SOURCE_FILE" > "${SOURCE_FILE}.tmp" +mv "${SOURCE_FILE}.tmp" "$SOURCE_FILE" +echo "'Architectures: amd64' added where missing after 'Types: deb' in $SOURCE_FILE." + fi +sudo dpkg --add-architecture arm64 +dpkg --print-architecture +dpkg --print-foreign-architectures +# Update package lists +echo "Updating APT package lists..." +sudo apt-get update -sudo apt-get -y install libasound-dev libjack-dev libpulse-dev oss4-dev #rtaudio - -sudo apt-get update && sudo apt-get install -y autoconf libtool automake dos2unix -sudo apt-get update && sudo apt-get install -y cmake build-essential -sudo apt-get update && sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libglx-dev libgl-dev mesa-common-dev libgl1-mesa-dev libglx-dev - -sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils libtool dos2unix -sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev ccache -sudo aptitude install -y gperf - -sudo apt-get install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu - -sudo apt-get install \ - libboost-iostreams1.83.0:arm64 \ - libcwidget4:arm64 \ - libsigc++-2.0-0v5:arm64 \ - libxapian30:arm64 \ - libasound2-plugins:arm64 \ - libosmesa6:arm64 \ - libpcsclite1:arm64 \ - libspeexdsp1:arm64 \ - libwine:arm64 \ - libxkbregistry0:arm64 \ - libz-mingw-w64:arm64 \ - wine:arm64 \ - wine64:arm64 \ - wget2:arm64 \ - make:arm64 \ - libjack-jackd2-0:arm64 \ - libjack-jackd2-dev:arm64 \ - freeglut3-dev:arm64 \ - libasound2-dev:arm64 \ - libxmu-dev:arm64 \ - libxxf86vm-dev:arm64 \ - g++:arm64 \ +echo "Done! ARM64 and ARMHF architectures are ready." + +echo "Installing ARM64 packages..." +apt-get install -y --no-install-recommends \ + aptitude:arm64 \ + gcc-aarch64-linux-gnu \ + g++-aarch64-linux-gnu \ + gfortran:arm64 \ + texinfo:arm64 \ + bison:arm64 \ + libncurses-dev:arm64 \ + unzip:arm64 \ + pkg-config:arm64 \ + flex:arm64 \ + openssl:arm64 \ + pigz:arm64 \ + autoconf:arm64 \ + automake:arm64 \ + figlet:arm64 \ + gperf:arm64 \ libgl1-mesa-dev:arm64 \ libglu1-mesa-dev:arm64 \ - libraw1394-dev:arm64 \ - libudev-dev:arm64 \ - libdrm-dev:arm64 \ - libglew-dev:arm64 \ - libopenal-dev:arm64 \ - libsndfile1-dev:arm64 \ - libfreeimage-dev:arm64 \ - libcairo2-dev:arm64 \ - libfreetype6-dev:arm64 \ - libpulse-dev:arm64 \ - libusb-1.0-0-dev:arm64 \ - libgtk2.0-dev:arm64 \ - libopencv-dev:arm64 \ - libassimp-dev:arm64 \ - librtaudio-dev:arm64 \ - gdb:arm64 \ - libglfw3-dev:arm64 \ - liburiparser-dev:arm64 \ - libpugixml-dev:arm64 \ - libgconf-2-4:arm64 \ - libgtk2.0-0:arm64 \ - libpoco-dev:arm64 \ + freeglut3-dev:arm64 \ + libxrandr-dev:arm64 \ + libxinerama-dev:arm64 \ + libx11-dev:arm64 \ + libxext-dev:arm64 \ libxcursor-dev:arm64 \ libxi-dev:arm64 \ - libxinerama-dev:arm64 \ - libgstreamer1.0-dev:arm64 \ - libgstreamer-plugins-base1.0-dev:arm64 \ - gstreamer1.0-libav:arm64 \ - gstreamer1.0-pulseaudio:arm64 \ - gstreamer1.0-x:arm64 \ - gstreamer1.0-plugins-bad:arm64 \ - gstreamer1.0-alsa:arm64 \ - gstreamer1.0-plugins-base:arm64 \ - gstreamer1.0-plugins-good:arm64 - -dpkg -L gcc-aarch64-linux-gnu + ccache:arm64 \ + binutils-aarch64-linux-gnu:arm64 \ + libgles2-mesa-dev:arm64 + +# apt-get install -y gawk:arm64 --no-remove +# if [[ "$(uname -m)" == "x86_64" ]]; then +# # issues with apt packages install manually +# wget http://ftp.us.debian.org/debian/pool/main/g/gawk/gawk_5.2.1-2+b2_arm64.deb +# sudo dpkg -i --force-architecture --force-depends gawk_5.2.1-2+b2_arm64.deb +# fi + + +# sudo apt-get install -y aptitude gawk gcc g++ gfortran texinfo bison libncurses-dev unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils +# sudo aptitude install -y gperf +# sudo apt-get update && sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev +# sudo apt-get install -y ccache +# sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu + +# dpkg -L gcc-aarch64-linux-gnu +# sudo apt install libgl1-mesa-dev libgles2-mesa-dev + if [ -d "/usr/lib/x86_64-linux-gnu" ]; then find /usr/lib/x86_64-linux-gnu -name "libGL*" + + lib_files=$(find /usr/lib/x86_64-linux-gnu -name "libGL*") + + if [ -z "$lib_files" ]; then + echo "No libGL* files found in /usr/lib/x86_64-linux-gnu" + exit 1 + fi + echo -e "\n\033[1;32m==== Running ldd on libGL* files ====\033[0m" + for file in $lib_files; do + echo -e "\n\033[1;34mFile: $file\033[0m" + ldd "$file" || echo "Error: Could not run ldd on $file" + done fi -if [ -d "/usr/lib/x86_64-linux-gnu" ]; then - find /usr/lib/x86_64-linux-gnu -name "libGL*" +if [ -d "/usr/lib/aarch64-linux-gnu" ]; then + find /usr/lib/aarch64-linux-gnu -name "libGL*" +else + echo "Directory /usr/lib/aarch64-linux-gnu does not exist." fi -# Download the installer script -# CMAKE_VERSION=3.30.0 -# wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-linux-x86_64.sh -# chmod +x cmake-${CMAKE_VERSION}-linux-x86_64.sh -# sudo ./cmake-${CMAKE_VERSION}-linux-x86_64.sh --skip-license --prefix=/usr/local -# export PATH="/usr/local/bin:$PATH" - -# Verify the installation -cmake --version +PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig \ + PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu \ + PKG_CONFIG_SYSROOT_DIR=/ \ + pkg-config --list-all diff --git a/scripts/linux/armv6l/install.sh b/scripts/linux/armv6l/install.sh deleted file mode 100755 index 492ece9df..000000000 --- a/scripts/linux/armv6l/install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -# set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd $SCRIPT_DIR -APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" - -sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils -sudo aptitude install -y gperf -sudo apt-get update && sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev -sudo apt-get install -y ccache diff --git a/scripts/linux/armv7l/install.sh b/scripts/linux/armv7l/install.sh deleted file mode 100755 index b7903435f..000000000 --- a/scripts/linux/armv7l/install.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash -# set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd $SCRIPT_DIR -APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" - -sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils -sudo aptitude install -y gperf -sudo apt-get update && sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev -sudo apt-get install -y ccache - -sudo apt-get install -y ccache -sudo apt-get install gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabihf -sudo apt-get install \ - libboost-iostreams1.83.0:armhf \ - libcwidget4:armhf \ - libsigc++-2.0-0v5:armhf \ - libxapian30:armhf \ - libasound2-plugins:armhf \ - libosmesa6:armhf \ - libpcsclite1:armhf \ - libspeexdsp1:armhf \ - libwine:armhf \ - libxkbregistry0:armhf \ - libz-mingw-w64:armhf \ - wine:armhf \ - wget2:armhf \ - make:armhf \ - libjack-jackd2-0:armhf \ - libjack-jackd2-dev:armhf \ - freeglut3-dev:armhf \ - libasound2-dev:armhf \ - libxmu-dev:armhf \ - libxxf86vm-dev:armhf \ - g++:armhf \ - libgl1-mesa-dev:armhf \ - libglu1-mesa-dev:armhf \ - libraw1394-dev:armhf \ - libudev-dev:armhf \ - libdrm-dev:armhf \ - libglew-dev:armhf \ - libopenal-dev:armhf \ - libsndfile1-dev:armhf \ - libfreeimage-dev:armhf \ - libcairo2-dev:armhf \ - libfreetype6-dev:armhf \ - libpulse-dev:armhf \ - libusb-1.0-0-dev:armhf \ - libgtk2.0-dev:armhf \ - libopencv-dev:armhf \ - libassimp-dev:armhf \ - librtaudio-dev:armhf \ - gdb:armhf \ - libglfw3-dev:armhf \ - libfftw3-dev:armhf \ - liburiparser-dev:armhf \ - libpugixml-dev:armhf \ - libgconf-2-4:armhf \ - libgtk2.0-0:armhf \ - libpoco-dev:armhf \ - libxcursor-dev:armhf \ - libxi-dev:armhf \ - libxinerama-dev:armhf \ - libgstreamer1.0-dev:armhf \ - libgstreamer-plugins-base1.0-dev:armhf \ - gstreamer1.0-libav:armhf \ - gstreamer1.0-pulseaudio:armhf \ - gstreamer1.0-x:armhf \ - gstreamer1.0-plugins-bad:armhf \ - gstreamer1.0-alsa:armhf \ - gstreamer1.0-plugins-base:armhf \ - gstreamer1.0-plugins-good:armhf - diff --git a/scripts/linux/armv8/install.sh b/scripts/linux/armv8/install.sh deleted file mode 100755 index 492ece9df..000000000 --- a/scripts/linux/armv8/install.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -# set -e - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd $SCRIPT_DIR -APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" - -sudo apt-get install -y aptitude build-essential gawk gcc g++ gfortran git texinfo bison libncurses-dev cmake unzip pkg-config flex openssl pigz autoconf automake tar figlet xz-utils -sudo aptitude install -y gperf -sudo apt-get update && sudo apt-get install -y libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev libxrandr-dev libxinerama-dev libx11-dev libxext-dev libxcursor-dev libxi-dev -sudo apt-get install -y ccache diff --git a/scripts/linux/aarch64/build.sh b/scripts/linux/raspios/aarch64/build.sh similarity index 100% rename from scripts/linux/aarch64/build.sh rename to scripts/linux/raspios/aarch64/build.sh diff --git a/scripts/linux/aarch64/multistrap.conf b/scripts/linux/raspios/aarch64/multistrap.conf similarity index 100% rename from scripts/linux/aarch64/multistrap.conf rename to scripts/linux/raspios/aarch64/multistrap.conf diff --git a/scripts/linux/aarch64/setup.sh b/scripts/linux/raspios/aarch64/setup.sh similarity index 55% rename from scripts/linux/aarch64/setup.sh rename to scripts/linux/raspios/aarch64/setup.sh index f2762d0ce..c57c965af 100755 --- a/scripts/linux/aarch64/setup.sh +++ b/scripts/linux/raspios/aarch64/setup.sh @@ -16,15 +16,27 @@ cd $SCRIPT_DIR APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" cd $APOTHECARY_LEVEL +if grep -q "Raspbian" /etc/os-release 2>/dev/null && [[ "$(uname -m)" == "aarch64" ]]; then + NATIVE="true" + echo "Detected Raspberry Pi OS (Raspbian) on arm64. Setting NATIVE=true" +else + NATIVE="false" +fi + CROSS_COMPILER=${CROSS_COMPILER:-raspbian} CROSS_SYSROOT=${CROSS_SYSROOT:-rpi_rootfs} CROSS_OS="${CROSS_OS:-bookworm}" -if [ "$CROSS_OS" == "bookworm" ]; then +if [ "$CROSS_OS" == "bookworm" ] && [ "$NATIVE" == "false" ]; then CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/Bookworm/GCC%2014.2.0/cross-gcc-14.2.0-pi_64.tar.gz/download" CROSS_NAME="cross-gcc-14.2.0-pi_64" CROSS_EXTRACT="cross-pi-gcc-14.2.0-64" echo "Using Bookworm toolchain: $CROSS_NAME" +elif [ "$CROSS_OS" == "bookworm" ] && [ "$NATIVE" == "true" ]; then + CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Native-Compiler%20Toolchains/Bookworm/GCC%2014.2.0/native-gcc-14.2.0-pi_64.tar.gz/download" + CROSS_NAME="native-gcc-14.2.0-pi_64" + CROSS_EXTRACT="native-pi-gcc-14.2.0-64" + echo "Using Native Bookworm toolchain: $CROSS_NAME" elif [ "$CROSS_OS" == "Bullseye" ]; then # CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/Bullseye/GCC%2013.1.0/cross-gcc-13.1.0-pi_64.tar.gz/download" # CROSS_NAME="cross-gcc-13.1.0-pi_64" @@ -36,15 +48,19 @@ else echo "Unsupported CROSS_OS value: $CROSS_OS" exit 1 fi + wget "${CROSS_URL}" -O ${CROSS_NAME}.tar.gz && tar xf ${CROSS_NAME}.tar.gz && rm ${CROSS_NAME}.tar.gz && mv ${CROSS_EXTRACT} ${CROSS_COMPILER} -wget "${CROSS_URL}" -O ${CROSS_NAME}.tar.gz && tar xf ${CROSS_NAME}.tar.gz && rm ${CROSS_NAME}.tar.gz && mv ${CROSS_EXTRACT} ${CROSS_COMPILER} -git clone https://github.com/danoli3/rpi_rootfs.git -cd $CROSS_SYSROOT +if [ "$NATIVE" == "0" ]; then -sudo chmod +x ./build_rootfs_arm64.sh + git clone https://github.com/danoli3/rpi_rootfs.git + cd $CROSS_SYSROOT -./build_rootfs_arm64.sh download -./build_rootfs_arm64.sh create + sudo chmod +x ./build_rootfs_arm64.sh + + ./build_rootfs_arm64.sh download + ./build_rootfs_arm64.sh create +fi echo "setup complete" +cd $SCRIPT_DIR diff --git a/scripts/linux/armv6l/.gitkeep b/scripts/linux/raspios/armv6l/.gitkeep similarity index 100% rename from scripts/linux/armv6l/.gitkeep rename to scripts/linux/raspios/armv6l/.gitkeep diff --git a/scripts/linux/armv6l/build.sh b/scripts/linux/raspios/armv6l/build.sh similarity index 100% rename from scripts/linux/armv6l/build.sh rename to scripts/linux/raspios/armv6l/build.sh diff --git a/scripts/linux/armv6l/multistrap.conf b/scripts/linux/raspios/armv6l/multistrap.conf similarity index 100% rename from scripts/linux/armv6l/multistrap.conf rename to scripts/linux/raspios/armv6l/multistrap.conf diff --git a/scripts/linux/armv6l/setup.sh b/scripts/linux/raspios/armv6l/setup.sh similarity index 100% rename from scripts/linux/armv6l/setup.sh rename to scripts/linux/raspios/armv6l/setup.sh diff --git a/scripts/linux/armv7l/build.sh b/scripts/linux/raspios/armv7l/build.sh similarity index 100% rename from scripts/linux/armv7l/build.sh rename to scripts/linux/raspios/armv7l/build.sh diff --git a/scripts/linux/armv7l/multistrap.conf b/scripts/linux/raspios/armv7l/multistrap.conf similarity index 100% rename from scripts/linux/armv7l/multistrap.conf rename to scripts/linux/raspios/armv7l/multistrap.conf diff --git a/scripts/linux/armv8/setup.sh b/scripts/linux/raspios/armv7l/setup.sh similarity index 64% rename from scripts/linux/armv8/setup.sh rename to scripts/linux/raspios/armv7l/setup.sh index 75b4d732a..613f36e76 100755 --- a/scripts/linux/armv8/setup.sh +++ b/scripts/linux/raspios/armv7l/setup.sh @@ -19,11 +19,19 @@ cd $APOTHECARY_LEVEL CROSS_COMPILER=${CROSS_COMPILER:-raspbian} CROSS_SYSROOT=${CROSS_SYSROOT:-rpi_rootfs} CROSS_OS="${CROSS_OS:-bookworm}" +NATIVE="${NATIVE:-"false"}" -if [ "$CROSS_OS" == "bookworm" ]; then + + + +if [ "$CROSS_OS" == "bookworm" ] && [ "$NATIVE" == "0" ]; then CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Cross-Compiler%20Toolchains/Buster/GCC%2014.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204%2C%205/cross-gcc-14.2.0-pi_3%2B.tar.gz/download" - CROSS_NAME=cross-gcc-14.2.0-pi_3+ - CROSS_EXTRACT=cross-pi-gcc-14.2.0-2 + CROSS_NAME="cross-gcc-14.2.0-pi_3+" + CROSS_EXTRACT="cross-pi-gcc-14.2.0-2" +if [ "$CROSS_OS" == "bookworm" ] && [ "$NATIVE" == "1" ]; then + CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Raspberry%20Pi%20GCC%20Native-Compiler%20Toolchains/Bookworm/GCC%2014.2.0/Raspberry%20Pi%203A%2B%2C%203B%2B%2C%204%2C%205/native-gcc-14.2.0-pi_3%2B.tar.gz/download" + CROSS_NAME="native-gcc-14.2.0-pi_3%2B" + CROSS_EXTRACT="cross-pi-gcc-14.2.0-2" elif [ "$CROSS_OS" == "Bullseye" ]; then # CROSS_URL="https://sourceforge.net/projects/raspberry-pi-cross-compilers/files/Bonus%20Raspberry%20Pi%20GCC%2064-Bit%20Toolchains/Raspberry%20Pi%20GCC%2064-Bit%20Cross-Compiler%20Toolchains/Bullseye/GCC%2013.1.0/cross-gcc-13.1.0-pi_64.tar.gz/download" # CROSS_NAME="cross-gcc-13.1.0-pi_64" @@ -38,11 +46,15 @@ fi wget "${CROSS_URL}" -O ${CROSS_NAME}.tar.gz && tar xf ${CROSS_NAME}.tar.gz && rm ${CROSS_NAME}.tar.gz && mv ${CROSS_EXTRACT} ${CROSS_COMPILER} -git clone https://github.com/danoli3/rpi_rootfs.git -cd $CROSS_SYSROOT -sudo chmod +x ./build_rootfs.sh -./build_rootfs.sh download -./build_rootfs.sh create +if [ "$NATIVE" == "0" ]; then + git clone https://github.com/danoli3/rpi_rootfs.git + cd $CROSS_SYSROOT + sudo chmod +x ./build_rootfs.sh + ./build_rootfs.sh download + ./build_rootfs.sh create +fi echo "setup complete" + +cd $SCRIPT_DIR diff --git a/scripts/linux/armv8/build.sh b/scripts/linux/raspios/armv8/build.sh similarity index 100% rename from scripts/linux/armv8/build.sh rename to scripts/linux/raspios/armv8/build.sh diff --git a/scripts/linux/armv7l/setup.sh b/scripts/linux/raspios/armv8/setup.sh similarity index 100% rename from scripts/linux/armv7l/setup.sh rename to scripts/linux/raspios/armv8/setup.sh diff --git a/scripts/linux/raspios/install.sh b/scripts/linux/raspios/install.sh new file mode 100755 index 000000000..573c6edf2 --- /dev/null +++ b/scripts/linux/raspios/install.sh @@ -0,0 +1,157 @@ +#!/bin/bash +# set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd $SCRIPT_DIR +APOTHECARY_LEVEL="$(cd "$SCRIPT_DIR/../.." && pwd)" + +set -e + +echo "=== Linux ARM64 cross setup ===" +lsb_release -a + +sudo apt update -y +sudo apt install -y \ + git \ + cmake \ + pkgconf \ + build-essential \ + ninja-build \ + gawk \ + automake \ + autoconf \ + flex \ + crossbuild-essential-armhf \ + crossbuild-essential-arm64 + +sudo apt install -y \ + python3-minimal \ + python3-numpy + +# Ensure the script is run as root +if [[ $EUID -ne 0 ]]; then + echo "This script must be run as root." + exit 1 +fi + +# Ubuntu version detection +UBUNTU_VERSION=$(lsb_release -cs) # e.g., "lunar" for Ubuntu 23.04 + +# Check for valid Ubuntu version +if [[ -z "$UBUNTU_VERSION" ]]; then + echo "Error: Could not detect Ubuntu version. Ensure lsb-release is installed." + exit 1 +fi +if [[ "$(uname -m)" == "aarch64" ]]; then + echo "Native aarch64 detected. No need to generate ARM64 /apt/sources. edits" +else +# Define output file path +OUTPUT_FILE="/etc/apt/sources.list.d/arm64.sources" +echo "making sources file arm64" + +# Generate the .sources content +cat < $OUTPUT_FILE +Types: deb +URIs: http://ports.ubuntu.com/ubuntu-ports/ +Suites: $UBUNTU_VERSION $UBUNTU_VERSION-updates $UBUNTU_VERSION-backports $UBUNTU_VERSION-security +Components: main restricted universe multiverse +Architectures: arm64 armhf +Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg +EOF + +# Output the result +echo "Generated ARM64 .sources file at $OUTPUT_FILE" + + +SOURCE_FILE="/etc/apt/sources.list.d/ubuntu.sources" +awk ' +/^Types: deb/ { + print $0 + getline nextLine + if (nextLine !~ /^Architectures:/) { + print "Architectures: amd64" + } + print nextLine + next +} +{ print $0 } +' "$SOURCE_FILE" > "${SOURCE_FILE}.tmp" +mv "${SOURCE_FILE}.tmp" "$SOURCE_FILE" +echo "'Architectures: amd64' added where missing after 'Types: deb' in $SOURCE_FILE." + +fi +sudo dpkg --add-architecture arm64 +sudo dpkg --add-architecture amd64 +dpkg --print-architecture +dpkg --print-foreign-architectures + +# Update package lists +echo "Updating APT package lists..." +sudo apt-get update +echo "Done! ARM64 and ARMHF architectures are ready." + +echo "Installing ARM64 packages..." +apt-get install -y \ + aptitude:arm64 \ + gcc-aarch64-linux-gnu \ + g++-aarch64-linux-gnu \ + gfortran:arm64 \ + texinfo:arm64 \ + bison:arm64 \ + libncurses-dev:arm64 \ + unzip:arm64 \ + pkg-config:arm64 \ + flex:arm64 \ + openssl:arm64 \ + pigz:arm64 \ + autoconf:arm64 \ + automake:arm64 \ + figlet:arm64 \ + xz-utils:arm64 \ + gperf:arm64 \ + libgl1-mesa-dev:arm64 \ + libglu1-mesa-dev:arm64 \ + freeglut3-dev:arm64 \ + libxrandr-dev:arm64 \ + libxinerama-dev:arm64 \ + libx11-dev:arm64 \ + libxext-dev:arm64 \ + libxcursor-dev:arm64 \ + libxi-dev:arm64 \ + ccache:arm64 \ + binutils-aarch64-linux-gnu:arm64 \ + libgles2-mesa-dev:arm64 + +# apt-get install -y gawk:arm64 --no-remove +if [[ "$(uname -m)" == "x86_64" ]]; then + # issues with apt packages install manually + wget http://ftp.us.debian.org/debian/pool/main/g/gawk/gawk_5.2.1-2+b2_arm64.deb + sudo dpkg -i --force-architecture --force-depends gawk_5.2.1-2+b2_arm64.deb +fi + + +if [ -d "/usr/lib/x86_64-linux-gnu" ]; then + find /usr/lib/x86_64-linux-gnu -name "libGL*" + + lib_files=$(find /usr/lib/x86_64-linux-gnu -name "libGL*") + + if [ -z "$lib_files" ]; then + echo "No libGL* files found in /usr/lib/x86_64-linux-gnu" + exit 1 + fi + echo -e "\n\033[1;32m==== Running ldd on libGL* files ====\033[0m" + for file in $lib_files; do + echo -e "\n\033[1;34mFile: $file\033[0m" + ldd "$file" || echo "Error: Could not run ldd on $file" + done +fi +if [ -d "/usr/lib/aarch64-linux-gnu" ]; then + find /usr/lib/aarch64-linux-gnu -name "libGL*" +else + echo "Directory /usr/lib/aarch64-linux-gnu does not exist." +fi + +PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig \ + PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu \ + PKG_CONFIG_SYSROOT_DIR=/ \ + pkg-config --list-all diff --git a/scripts/osx/install.sh b/scripts/osx/install.sh index 9951f15c7..931bd56fd 100755 --- a/scripts/osx/install.sh +++ b/scripts/osx/install.sh @@ -1,9 +1,16 @@ +#!/usr/bin/env bash # Silent update to prevent long logs -brew update >/dev/null -brew install cmake coreutils autoconf automake ccache gtk-doc brotli libtool wget fontconfig bash shfmt wget2 curl +if ! which realpath >&/dev/null; then + if ! which brew >&/dev/null; then + msg="ERROR: This script requires brew. See https://brew.sh for installation instructions." + echo "$(tput setaf 1)$msg$(tput sgr0)" >&2 + exit 1 + fi +fi -# brew reinstall libtool +brew update >/dev/null +brew install cmake coreutils autoconf automake ccache gtk-doc brotli libtool wget fontconfig bash shfmt wget2 curl ls -n /Applications/ | grep Xcode diff --git a/scripts/secure.sh b/scripts/secure.sh index 8858499b0..aea153dd5 100755 --- a/scripts/secure.sh +++ b/scripts/secure.sh @@ -8,13 +8,13 @@ calculate_hash() { local file=$1 if [[ -f "$file" ]]; then if command -v sha256sum &>/dev/null; then - sha256sum "$file" | awk '{print $1}' + sha256sum "$file" | cut -d ' ' -f 1 elif command -v sha1sum &>/dev/null; then - sha1sum "$file" | awk '{print $1}' + sha1sum "$file" | cut -d ' ' -f 1 elif command -v sha512sum &>/dev/null; then - sha512sum "$file" | awk '{print $1}' + sha512sum "$file" | cut -d ' ' -f 1 elif command -v md5sum &>/dev/null; then - md5sum "$file" | awk '{print $1}' + md5sum "$file" | cut -d ' ' -f 1 elif command -v md5 &>/dev/null; then md5 -q "$file" else diff --git a/scripts/summary.sh b/scripts/summary.sh new file mode 100755 index 000000000..263094ac6 --- /dev/null +++ b/scripts/summary.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +ORIGINAL_DIR="$(pwd)" +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd $CURRENT_DIR +APOTHECARY_LEVEL="$(cd "$CURRENT_DIR/.." && pwd)" + +if [ -d "$APOTHECARY_LEVEL/out" ]; then + echo "out dir exists" +else + echo "OUT_DIR does not exist. Creating it..." + mkdir -p "$APOTHECARY_LEVEL/out" +fi + +OUT_DIR="$(cd "$APOTHECARY_LEVEL/out" && pwd)" +cd $OUT_DIR + +SUMMARY_FILE="Manifesto.md" + +# Initialize Manifesto file with a Markdown table +echo "# Manifesto for All Libraries" > "$SUMMARY_FILE" +echo "" >> "$SUMMARY_FILE" +echo "| Library | Version | Build Time | Build Number | Git URL | C++ Standard | C Standard | Linker Flags | Dependencies | Binary | Binary SHA | SHA Type | Source SHA | Defines | Frameworks |" >> "$SUMMARY_FILE" +echo "|---------|---------|------------|--------------|---------|--------------|------------|--------------|-------------|--------|------------|----------|------------|---------|-----------|" >> "$SUMMARY_FILE" + +# Function to safely extract values (removes quotes & spaces) +extract_value() { + local key="$1" + awk -F' *= *' -v key="$key" '$1 == key {gsub(/"/, "", $2); print $2}' "$pkl_file" | tr -d '\n' +} + +# Process all .pkl files +find "$OUT_DIR" -type f -name "*.pkl" | while read -r pkl_file; do + LIB_NAME=$(basename "$(dirname "$pkl_file")") + + echo "Processing $LIB_NAME ($pkl_file)..." + + # Extract values correctly + name=$(extract_value "name") + version=$(extract_value "version") + build_time=$(extract_value "buildTime") + build_number=$(extract_value "buildNumber") + git_url=$(extract_value "gitUrl") + cpp_standard=$(extract_value "cppStandard") + c_standard=$(extract_value "cStandard") + linker_flags=$(extract_value "linkerFlags") + dependencies=$(extract_value "dependencies") + binary=$(extract_value "binary") + binary_sha=$(extract_value "binarySha") + sha_type=$(extract_value "shaType") + source_sha=$(extract_value "sourceSHA") + defines=$(extract_value "defines") + frameworks=$(extract_value "frameworks") + + # Ensure empty values are replaced with `-` + version=${version:-"-"} + build_time=${build_time:-"-"} + build_number=${build_number:-"-"} + git_url=${git_url:-"-"} + cpp_standard=${cpp_standard:-"-"} + c_standard=${c_standard:-"-"} + linker_flags=${linker_flags:-"-"} + dependencies=${dependencies:-"-"} + binary=${binary:-"-"} + binary_sha=${binary_sha:-"-"} + sha_type=${sha_type:-"-"} + source_sha=${source_sha:-"-"} + defines=${defines:-"-"} + frameworks=${frameworks:-"-"} + + # **Fix Binary & SHA merging by wrapping each properly** + binary="\`$binary\`" + binary_sha="\`$binary_sha\`" + + # Append properly formatted row + echo "| $name | $version | $build_time | $build_number | $git_url | $cpp_standard | $c_standard | $linker_flags | $dependencies | $binary | $binary_sha | $sha_type | $source_sha | $defines | $frameworks |" >> "$SUMMARY_FILE" +done + +# Post summary to GitHub Actions +if [ "${GITHUB_ACTIONS}" == "true" ]; then + echo "## Build Summary" >> "$GITHUB_STEP_SUMMARY" + cat "$SUMMARY_FILE" >> "$GITHUB_STEP_SUMMARY" +else + echo "Not running in GitHub Actions. Skipping summary update." +fi + +cd "$ORIGINAL_DIR"