From 8db2c41e1b72b458cff6391e1a7d5f880258176b Mon Sep 17 00:00:00 2001 From: Nicolas Date: Sun, 23 Nov 2025 17:46:03 +0100 Subject: [PATCH] ci and build scripts updated for armv7 --- .github/workflows/build_docker_image.yml | 31 +++++++++++++++++- .github/workflows/ci.yml | 37 +++++++++++++++++++--- tools/build.bat | 2 +- tools/build.sh | 24 +++++++++----- tools/cross_compiler_unix/build_musl.sh | 4 +-- tools/crosscompile.sh | 4 +-- tools/inspect.sh | 13 ++++++-- tools/{arm64_test => qemu_test}/Dockerfile | 0 8 files changed, 94 insertions(+), 21 deletions(-) rename tools/{arm64_test => qemu_test}/Dockerfile (100%) diff --git a/.github/workflows/build_docker_image.yml b/.github/workflows/build_docker_image.yml index 6f9ab27..b67c98e 100644 --- a/.github/workflows/build_docker_image.yml +++ b/.github/workflows/build_docker_image.yml @@ -61,5 +61,34 @@ jobs: run: echo "IMAGE_NAME=ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/arm64_test:1" >> $GITHUB_ENV - name: Build & Push Docker image - run: docker buildx build --platform linux/arm64 --push -t $IMAGE_NAME tools/arm64_test/ + run: docker buildx build --platform linux/arm64 --push -t $IMAGE_NAME tools/qemu_test/ + docker-build-armv7: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: arm + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Set image name + run: echo "IMAGE_NAME=ghcr.io/${GITHUB_REPOSITORY_OWNER,,}/armv7_test:1" >> $GITHUB_ENV + + - name: Build & Push Docker image + run: docker buildx build --platform linux/arm/v7 --push -t $IMAGE_NAME tools/qemu_test/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6274454..41a47f1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,9 +2,9 @@ name: CI Pipeline on: push: - branches: [main] + branches: [main, dev] pull_request: - branches: [main] + branches: [main, dev] jobs: build_stencils: @@ -149,6 +149,34 @@ jobs: name: runner-linux-arm64 path: build/runner/* + build-armv7: + needs: [build_stencils] + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: stencil-object-files + path: src/copapy/obj + - name: Set up QEMU for ARMv7 + uses: docker/setup-qemu-action@v3 + with: + platforms: linux/arm/v7 + - name: Use ARMv7 container + run: | + docker run --rm -v $PWD:/app -w /app --platform linux/arm/v7 ghcr.io/nonannet/armv7_test:1 \ + bash -lc "pip install . && \ + mkdir -p build/runner && \ + gcc -O3 -DENABLE_LOGGING -o build/runner/coparun src/coparun/runmem.c \ + src/coparun/coparun.c src/coparun/mem_man.c && \ + pytest" + + - uses: actions/upload-artifact@v4 + with: + name: runner-linux-armv7 + path: build/runner/* + build-windows: needs: [build_stencils] runs-on: windows-latest @@ -204,7 +232,7 @@ jobs: path: build/runner/* release-stencils: - needs: [build_stencils, build-ubuntu, build-windows, build-arm64] + needs: [build_stencils, build-ubuntu, build-windows, build-arm64, build-armv7] runs-on: ubuntu-latest if: github.event_name == 'push' permissions: @@ -236,7 +264,8 @@ jobs: cp tmp/musl-object-files/* release/ cp tmp/cross-runner/coparun-* release/ cp tmp/runner-linux/coparun release/ - cp tmp/runner-linux-arm64/coparun release/ + cp tmp/runner-linux-arm64/coparun release/coparun-aarch64 + cp tmp/runner-linux-armv7/coparun release/coparun-armv7 cp tmp/runner-win/coparun*.exe release/ TAG="${{ steps.version.outputs.version }}" diff --git a/tools/build.bat b/tools/build.bat index bd7c053..5402235 100644 --- a/tools/build.bat +++ b/tools/build.bat @@ -51,7 +51,7 @@ wsl arm-none-eabi-ld -r build/stencils/stencils.o build/musl/musl_objects_armv6. wsl arm-none-eabi-objdump -d -x src/copapy/obj/stencils_armv6_O3.o > build/stencils/stencils_armv6_O3.asm echo ------------------------------ REM echo - Build runner -REM wsl arm-none-eabi-gcc -march=armv6 -mfpu=vfp -marm -static -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -O3 -DENABLE_LOGGING src/coparun/runmem.c src/coparun/coparun.c src/coparun/mem_man.c -o build/runner/coparun-armv6 +REM wsl arm-linux-gnueabihf-gcc -march=armv6 -mfpu=vfp -marm -static -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -O3 -DENABLE_LOGGING src/coparun/runmem.c src/coparun/coparun.c src/coparun/mem_man.c -o build/runner/coparun-armv6 diff --git a/tools/build.sh b/tools/build.sh index 73f697e..884b7a5 100644 --- a/tools/build.sh +++ b/tools/build.sh @@ -1,20 +1,28 @@ #!/bin/bash set -e set -v -mkdir -p bin + +mkdir -p build/stencils +mkdir -p build/runner + SRC=build/stencils/stencils.c DEST=src/copapy/obj python3 stencils/generate_stencils.py $SRC mkdir -p $DEST -gcc --version -#gcc -fno-pic -c $SRC -O0 -o $DEST/stencils_x86_64_O0.o -#gcc -fno-pic -c $SRC -O1 -o $DEST/stencils_x86_64_O1.o -#gcc -fno-pic -c $SRC -O2 -o $DEST/stencils_x86_64_O2.o -gcc -fno-pic -c $SRC -O3 -o $DEST/stencils_x86_64_O3.o + +gcc -fno-pic -ffunction-sections -c $SRC -O3 -o build/stencils/stencils.o +ld -r build/stencils/stencils.o build/musl/musl_objects_x86_64.o -o $DEST/stencils_x86_64_O3.o +objdump -d -x $DEST/stencils_x86_64_O3.o > build/stencils/stencils_x86_64_O3.asm mkdir bin -p gcc -Wall -Wextra -Wconversion -Wsign-conversion \ -Wshadow -Wstrict-overflow -Werror -g -O3 \ - -DENABLE_LOGGING + -DENABLE_LOGGING \ src/coparun/runmem.c src/coparun/coparun.c src/coparun/mem_man.c -o build/runner/coparun -#x86_64-w64-mingw32-gcc -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -Werror src/runner/runmem2.c -Wall -O3 -o bin/runmem2.exe + + +echo "--------------arm-v7 32 bit----------------" +arm-none-eabi-gcc -fno-pic -ffunction-sections -march=armv7-a -mfpu=neon-vfpv3 -mfloat-abi=hard -marm -c $SRC -O3 -o build/stencils/stencils.o +arm-none-eabi-ld -r build/stencils/stencils.o build/musl/musl_objects_armv7.o -o $DEST/stencils_armv7_O3.o +arm-none-eabi-objdump -d -x $DEST/stencils_armv7_O3.o > build/stencils/stencils_armv7_O3.asm +arm-linux-gnueabihf-gcc -march=armv7-a -mfpu=neon-vfpv3 -mfloat-abi=hard -marm -static -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -O3 -DENABLE_LOGGING src/coparun/runmem.c src/coparun/coparun.c src/coparun/mem_man.c -o build/runner/coparun-armv7 diff --git a/tools/cross_compiler_unix/build_musl.sh b/tools/cross_compiler_unix/build_musl.sh index 3727284..a250830 100644 --- a/tools/cross_compiler_unix/build_musl.sh +++ b/tools/cross_compiler_unix/build_musl.sh @@ -16,9 +16,9 @@ sh ../packobjs.sh i686-linux-gnu-gcc-13 i686-linux-gnu-ld /object_files/musl_obj sh ../packobjs.sh aarch64-linux-gnu-gcc-13 aarch64-linux-gnu-ld /object_files/musl_objects_arm64.o -sh ../packobjs.sh arm-none-eabi-gcc-13 arm-none-eabi-ld /object_files/musl_objects_armv6.o "-march=armv6 -mfpu=vfp -marm" +sh ../packobjs.sh arm-none-eabi-gcc-13 arm-none-eabi-ld /object_files/musl_objects_armv6.o "-march=armv6 -mfpu=vfp -mfloat-abi=hard -marm" -sh ../packobjs.sh arm-none-eabi-gcc-13 arm-none-eabi-ld /object_files/musl_objects_armv7.o "-march=armv7-a -mfpu=neon-vfpv3 -marm" +sh ../packobjs.sh arm-none-eabi-gcc-13 arm-none-eabi-ld /object_files/musl_objects_armv7.o "-march=armv7-a -mfpu=neon-vfpv3 -mfloat-abi=hard -marm" #sh ../packobjs.sh mips mips-linux-gnu-gcc-13 mips-linux-gnu-ld diff --git a/tools/crosscompile.sh b/tools/crosscompile.sh index 10d81d6..555fe56 100644 --- a/tools/crosscompile.sh +++ b/tools/crosscompile.sh @@ -32,11 +32,11 @@ aarch64-linux-gnu-gcc-13 $FLAGS -$OPT -c $SRC -o $STMP aarch64-linux-gnu-ld -r $STMP /object_files/musl_objects_arm64.o -o $DEST/stencils_arm64_$OPT.o # ARMv6 hardware fp -arm-none-eabi-gcc-13 -march=armv6 -mfpu=vfp -marm $FLAGS -$OPT -c $SRC -o $STMP +arm-none-eabi-gcc-13 -march=armv6 -mfpu=vfp -mfloat-abi=hard -marm $FLAGS -$OPT -c $SRC -o $STMP arm-none-eabi-ld -r $STMP /object_files/musl_objects_armv6.o -o $DEST/stencils_armv6_$OPT.o # ARMv7 hardware fp -arm-none-eabi-gcc-13 -march=armv7-a -mfpu=neon-vfpv3 -marm $FLAGS -$OPT -c $SRC -o $STMP +arm-none-eabi-gcc-13 -march=armv7-a -mfpu=neon-vfpv3 -mfloat-abi=hard -marm $FLAGS -$OPT -c $SRC -o $STMP arm-none-eabi-ld -r $STMP /object_files/musl_objects_armv7.o -o $DEST/stencils_armv7_$OPT.o # PowerPC64LE diff --git a/tools/inspect.sh b/tools/inspect.sh index f08b019..c25e898 100644 --- a/tools/inspect.sh +++ b/tools/inspect.sh @@ -1,9 +1,16 @@ #!/bin/bash -source tools/build.sh +set -e +set -v -objdump -d -j .text src/copapy/obj/stencils_x86_64_O3.o > build/stencils/stencils_x86_64_O3.asm +sh tools/build.sh + +#objdump -d -j .text src/copapy/obj/stencils_x86_64_O3.o > build/stencils/stencils_x86_64_O3.asm python3 tools/make_example.py -python3 tools/extract_code.py "build/runner/test.copapy" "build/runner/test.copapy.bin" + +build/runner/coparun build/runner/test.copapy build/runner/test.copapy.bin objdump -D -b binary -m i386:x86-64 --adjust-vma=0x1000 build/runner/test.copapy.bin > build/runner/test.copapy.asm + +build/runner/coparun-armv7 build/runner/test-armv7.copapy build/runner/test.copapy-armv7.bin +arm-none-eabi-objdump -D -b binary -marm --adjust-vma=0x50000 build/runner/test.copapy-armv7.bin > build/runner/test.copapy-armv7.asm diff --git a/tools/arm64_test/Dockerfile b/tools/qemu_test/Dockerfile similarity index 100% rename from tools/arm64_test/Dockerfile rename to tools/qemu_test/Dockerfile