diff --git a/.github/workflows/CI.yaml b/.github/workflows/CI.yaml index 6025f462..04c27238 100644 --- a/.github/workflows/CI.yaml +++ b/.github/workflows/CI.yaml @@ -133,20 +133,6 @@ jobs: export CXXFLAGS="-std=c++20 -stdlib=libc++ -static -fPIC -fno-cxx-exceptions -fno-exceptions -I/usr/include/c++/v1" && export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-alpine-linux-musl-gcc && CC=clang CXX=clang++ yarn build --target aarch64-unknown-linux-musl - - host: ubuntu-latest - target: 'armv7-unknown-linux-gnueabihf' - downloadTarget: 'armv7-unknown-linux-gnueabihf' - setup: | - sudo apt-get update - sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libatomic1-armhf-cross -y - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - docker buildx build --load --platform linux/arm/v7 -t ubuntu:noble-armv7 . -f noble-armv7.Dockerfile - docker run --rm -dt --name ubuntu-noble-armv7 ubuntu:noble-armv7 - sudo mkdir -p /usr/arm-linux-gnueabihf/lib/llvm-18 - sudo docker cp ubuntu-noble-armv7:/usr/lib/llvm-18/lib /usr/arm-linux-gnueabihf/lib/llvm-18/lib - sudo docker cp ubuntu-noble-armv7:/usr/lib/llvm-18/include /usr/arm-linux-gnueabihf/lib/llvm-18/include - docker stop ubuntu-noble-armv7 - build: yarn build --target armv7-unknown-linux-gnueabihf --use-napi-cross - host: ubuntu-latest target: 'aarch64-linux-android' downloadTarget: 'aarch64-linux-android' @@ -184,22 +170,6 @@ jobs: node-version: 20 cache: 'yarn' - - name: Set up QEMU - if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} - uses: docker/setup-qemu-action@v3 - with: - platforms: linux/arm/v7 - - name: Set up Docker Buildx - if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} - uses: docker/setup-buildx-action@v3 - with: - platforms: linux/arm/v7 - - - uses: goto-bus-stop/setup-zig@v2 - if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} - with: - version: 0.13.0 - - name: Set env if: matrix.settings.host == 'windows-latest' run: echo "C:\\msys64\\mingw64\\bin" >> $GITHUB_PATH @@ -242,6 +212,29 @@ jobs: name: bindings-${{ matrix.settings.target }} path: ${{ env.APP_NAME }}.*.node + build-armv7-linux-gnueabihf: + name: Build armv7-unknown-linux-gnueabihf + runs-on: ubuntu-latest + container: + image: debian:buster + + steps: + - name: Setup tools + run: | + apt-get update + apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libatomic1-armhf-cross git build-essential cmake ninja-build wget curl gnupg + - uses: actions/checkout@v4 + with: + submodules: true + + - name: Install dependencies + run: yarn install --immutable --mode=skip-build + + - name: Build + run: | + export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc + yarn build --target armv7-unknown-linux-gnueabihf + test-macOS-windows-binding: name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }} needs: @@ -535,6 +528,58 @@ jobs: name: failure-images-aarch64-unknown-linux-musl-lts path: __test__/failure/** + test-linux-arm-gnueabihf-binding: + name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }} + needs: + - build-armv7-linux-gnueabihf + strategy: + fail-fast: false + matrix: + node: ['18', '20', '22'] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Download Apple Emoji font + uses: robinraju/release-downloader@v1 + with: + repository: 'PoomSmart/EmojiLibrary' + tag: '0.15.4' + fileName: AppleColorEmoji@2x.ttf + token: ${{ secrets.GITHUB_TOKEN }} + out-file-path: __test__/fonts/ + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + name: bindings-armv7-unknown-linux-gnueabihf + path: . + - name: List packages + run: ls -R . + shell: bash + - name: Install dependencies + run: | + yarn config set supportedArchitectures.cpu "arm" + yarn install --immutable --mode=skip-build + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm + - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + - name: Setup and run tests + uses: addnab/docker-run-action@v3 + with: + image: node:${{ matrix.node }}-bullseye-slim + options: '--platform linux/arm/v7 -v ${{ github.workspace }}:/skia -w /skia' + run: | + set -e && \ + yarn test:ci && \ + ls -la + - name: Test failed + if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: failure-images-armv7-unknown-linux-gnueabihf-${{ matrix.node }} + path: __test__/failure/** + rust-test: name: stable - macOS - cargo - test runs-on: macos-latest @@ -607,6 +652,7 @@ jobs: - test-linux-x64-musl-binding - test-linux-aarch64-gnu-binding - test-linux-aarch64-musl-binding + - test-linux-arm-gnueabihf-binding - test-macOS-windows-binding steps: diff --git a/Cargo.toml b/Cargo.toml index c8a4f62a..b6cb8bd9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,4 +37,4 @@ napi-build = "2" [profile.release] codegen-units = 1 lto = true -strip = "symbols" +# strip = "symbols" diff --git a/build.rs b/build.rs index 81ed8a55..73254b23 100644 --- a/build.rs +++ b/build.rs @@ -156,18 +156,17 @@ fn main() { println!("cargo:rustc-link-lib=static=atomic"); } "arm" => { - link_libcxx(&mut build); env::set_var("CC", "clang"); env::set_var("CXX", "clang++"); env::set_var("TARGET_CC", "clang"); env::set_var("TARGET_CXX", "clang++"); build + .cpp_set_stdlib("stdc++") + .flag("-static") .include("/usr/arm-linux-gnueabihf/include") - .include(format!( - "/usr/arm-linux-gnueabihf/lib/llvm-18/include/c++/v1" - )); - println!("cargo:rustc-link-search=/usr/arm-linux-gnueabihf/lib"); - println!("cargo:rustc-link-search=/usr/arm-linux-gnueabihf/lib/llvm-18/lib"); + .include(format!("/usr/arm-linux-gnueabihf/include/c++/8")); + println!("cargo:rustc-link-lib=static=stdc++"); + println!("cargo:rustc-link-search=/usr/lib/gcc-cross/arm-linux-gnueabihf/8"); } _ => {} } diff --git a/noble-armv7.Dockerfile b/noble-armv7.Dockerfile deleted file mode 100644 index a836bb0c..00000000 --- a/noble-armv7.Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM ubuntu:24.04 - -RUN apt-get update && apt-get install -y \ - libc++-18-dev \ - libc++abi-18-dev diff --git a/package.json b/package.json index 600f02cd..3c267529 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "@jimp/custom": "^0.22.10", "@jimp/jpeg": "^0.22.10", "@jimp/png": "^0.22.10", - "@napi-rs/cli": "^3.0.0-alpha.69", + "@napi-rs/cli": "^3.0.0-alpha.70", "@octokit/rest": "^21.0.0", "@swc-node/register": "^1.8.0", "@swc/core": "^1.4.0", diff --git a/scripts/build-skia.js b/scripts/build-skia.js index f34c36e9..0b0ddc5a 100644 --- a/scripts/build-skia.js +++ b/scripts/build-skia.js @@ -82,7 +82,8 @@ const GN_ARGS = [ `skia_enable_fontmgr_custom_embedded=false`, `skia_enable_fontmgr_custom_empty=true`, `skia_enable_fontmgr_android=false`, - `skunicode_tests_enabled=false` + `skunicode_tests_enabled=false`, + `skia_enable_skshaper_tests=false` ] switch (PLATFORM_NAME) { @@ -113,7 +114,7 @@ switch (PLATFORM_NAME) { case 'linux': case 'darwin': ExtraCflagsCC = - '"-std=c++20",' + + '"-std=c++17",' + '"-fno-exceptions",' + '"-DSK_FORCE_RASTER_PIPELINE_BLITTER",' + '"-DSK_ENABLE_SVG",' + @@ -180,21 +181,10 @@ switch (TARGET_TRIPLE) { ) break case 'armv7-unknown-linux-gnueabihf': + CC='"arm-linux-gnueabihf-gcc"' + CXX='"arm-linux-gnueabihf-g++"' ExtraSkiaBuildFlag += ' target_cpu="armv7a" target_os="linux"' - ExtraCflags = `"--target=arm-unknown-linux-gnueabihf", "-I/usr/arm-linux-gnueabihf/lib/llvm-18/include/c++/v1", "-march=armv7-a", "-mthumb"` - ExtraCflagsCC += `,"-stdlib=libc++", "-static", "--target=arm-unknown-linux-gnueabihf", "-I/usr/arm-linux-gnueabihf/lib/llvm-18/include/c++/v1", "-march=armv7-a", "-mthumb"` - ExtraLdFlags = - '"--target=arm-unknown-linux-gnueabihf", "-B/usr/arm-linux-gnueabihf/bin", "-L/usr/arm-linux-gnueabihf/lib", "-L/usr/arm-linux-gnueabihf/lib/llvm-18/lib"' - ExtraAsmFlags = - '"--sysroot=/usr/arm-linux-gnueabihf", "--target=arm-unknown-linux-gnueabihf", "-march=armv7-a", "-mthumb", "-mfpu=neon"' - - GN_ARGS.push( - `extra_ldflags=[${ExtraLdFlags}]`, - `ar="llvm-ar-18"`, - `extra_asmflags=[${ExtraAsmFlags}]`, - `extra_cflags=[${ExtraCflags}]`, - `extra_cflags_c=[${ExtraCflags}]`, - ) + ExtraCflags = `"-march=armv7-a", "-mthumb", "-mfpu=neon"` break case 'aarch64-apple-darwin': ExtraSkiaBuildFlag += ' target_cpu="arm64" target_os="mac"' diff --git a/yarn.lock b/yarn.lock index 6beea06d..e8b54644 100644 --- a/yarn.lock +++ b/yarn.lock @@ -427,7 +427,7 @@ __metadata: "@jimp/custom": "npm:^0.22.10" "@jimp/jpeg": "npm:^0.22.10" "@jimp/png": "npm:^0.22.10" - "@napi-rs/cli": "npm:^3.0.0-alpha.69" + "@napi-rs/cli": "npm:^3.0.0-alpha.70" "@octokit/rest": "npm:^21.0.0" "@swc-node/register": "npm:^1.8.0" "@swc/core": "npm:^1.4.0" @@ -459,9 +459,9 @@ __metadata: languageName: unknown linkType: soft -"@napi-rs/cli@npm:^3.0.0-alpha.69": - version: 3.0.0-alpha.69 - resolution: "@napi-rs/cli@npm:3.0.0-alpha.69" +"@napi-rs/cli@npm:^3.0.0-alpha.70": + version: 3.0.0-alpha.70 + resolution: "@napi-rs/cli@npm:3.0.0-alpha.70" dependencies: "@inquirer/prompts": "npm:^7.0.0" "@napi-rs/cross-toolchain": "npm:^0.0.19" @@ -488,7 +488,7 @@ __metadata: bin: napi: ./dist/cli.js napi-raw: ./cli.mjs - checksum: 10c0/53f33683672900581ede7b380f633bb7940dff866f08bc824e672a13014b20cf90092c8426c96624e4ec4d40fd1bba66e3fcbcc54cd0c60e9e6eabb878a32c7c + checksum: 10c0/cc87d9966d31f5752d9b6d225bd0b9d722a772c9ea0be7af3782ef24b04bac11a54158acc22b5f88d3563723af6facf67a1d4f88880720bd093b0fdfaed63ecc languageName: node linkType: hard