Skip to content

Commit 4f32029

Browse files
committed
Test AArch64 Cygwin using WSL-capable GitHub Actions runner
1 parent f5e8602 commit 4f32029

File tree

10 files changed

+160
-18
lines changed

10 files changed

+160
-18
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.sh text eol=lf

.github/scripts/config.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ BUILD_PATH=${BUILD_PATH:-$ROOT_PATH/build-$TOOLCHAIN_NAME}
5959
CCACHE_DIR_PATH=${CCACHE_DIR_PATH:-$ROOT_PATH/ccache}
6060
ARTIFACT_PATH=${ARTIFACT_PATH:-$ROOT_PATH/artifact}
6161
BUILD_MAKE_OPTIONS=${BUILD_MAKE_OPTIONS:-V=1 -j$(nproc)}
62+
CHECK_MAKE_OPTIONS=${CHECK_MAKE_OPTIONS:-V=1 -j$(nproc) -k}
6263
TOOLCHAIN_PATH=${TOOLCHAIN_PATH:-~/cross-$TOOLCHAIN_NAME}
6364
TOOLCHAIN_FILE=${TOOLCHAIN_FILE:-$ROOT_PATH/.github/cmake/$TARGET.cmake}
6465
TOOLCHAIN_PACKAGE_NAME=${TOOLCHAIN_PACKAGE_NAME:-$TOOLCHAIN_NAME-toolchain.tar.gz}

.github/scripts/delete-build.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
source `dirname ${BASH_SOURCE[0]}`/config.sh
4+
5+
rm -rf $BUILD_PATH/*

.github/scripts/delete-code.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#!/bin/bash
2+
3+
source `dirname ${BASH_SOURCE[0]}`/config.sh
4+
5+
rm -rf $SOURCE_PATH/*

.github/scripts/install-dependencies.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ echo "::group::Install Dependencies"
1212
binutils-for-build \
1313
bison \
1414
build-essential \
15+
busybox \
1516
ccache \
1617
dejagnu \
1718
docbook2x \
1819
flex \
1920
gdc \
21+
jq \
2022
libc6-dev-arm64-cross \
2123
libc6-dev-amd64-cross \
2224
texinfo \

.github/scripts/pack-build.sh

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/bin/bash
2+
3+
source `dirname ${BASH_SOURCE[0]}`/config.sh
4+
5+
echo "::group::Pack build folder"
6+
mkdir -p $ARTIFACT_PATH
7+
tar czf $ARTIFACT_PATH/$BUILD_PACKAGE_NAME -C $BUILD_PATH .
8+
echo "::endgroup::"
9+
10+
echo 'Success!'

.github/scripts/toolchain/execute-cygwin-tests.sh

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,27 @@ CYGWIN_SOURCE_PATH=$SOURCE_PATH/cygwin
66
CYGWIN_BUILD_PATH=$BUILD_PATH/cygwin
77
CYGWIN_WINSUP_TEST_PATH=$BUILD_PATH/cygwin/$ARCH-$PLATFORM/winsup/testsuite
88

9+
mkdir -p $ARTIFACT_PATH
10+
911
echo "::group::Execute Cygwin tests"
1012
pushd "$CYGWIN_WINSUP_TEST_PATH" || exit 1
11-
make $CHECK_MAKE_OPTIONS check
13+
MAKE_CHECK_COMMAND="make $CHECK_MAKE_OPTIONS check"
14+
if [[ -z "$GITHUB_STEP_SUMMARY" ]]; then
15+
WSLENV="$WSLENV:PATH/p" \
16+
$MAKE_CHECK_COMMAND
17+
else
18+
RESULTS_FILE="$ARTIFACT_PATH/cygwin-test-results.txt"
19+
WSLENV="$WSLENV:PATH/p" \
20+
$MAKE_CHECK_COMMAND 2>&1 | tee "$RESULTS_FILE" || true
21+
awk '
22+
BEGIN { start=0; }
23+
/^={76}$/ && start==0 { start=1; next }
24+
/^See testsuite\/test-suite.log$/ { exit }
25+
/^Testsuite summary for Cygwin 0$/ { gsub(/=/, "-"); print "|", $0, "|\n| -- |"; next }
26+
/^={76}$/ && start==1 { next }
27+
!/^={76}$/ && start==1 { gsub(/#/, "|"); print $0, "|"; next }
28+
' "$RESULTS_FILE" > "$GITHUB_STEP_SUMMARY"
29+
fi
1230
popd
1331
echo "::endgroup::"
1432

.github/scripts/toolchain/install-cygwin-headers.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ source `dirname ${BASH_SOURCE[0]}`/../config.sh
55
CYGWIN_SOURCE_PATH=$SOURCE_PATH/cygwin
66

77
echo "::group::Install Cygwin headers"
8-
mkdir -p $TOOLCHAIN_PATH/include
8+
mkdir -p $TOOLCHAIN_PATH/$TARGET/include
99

1010
cp -r $CYGWIN_SOURCE_PATH/newlib/libc/include/* $TOOLCHAIN_PATH/$TARGET/include
1111
cp -r $CYGWIN_SOURCE_PATH/winsup/cygwin/include/* $TOOLCHAIN_PATH/$TARGET/include

.github/scripts/update-sources.sh

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
source `dirname ${BASH_SOURCE[0]}`/config.sh
44
source `dirname ${BASH_SOURCE[0]}`/git-utils.sh
55

6+
PROJECT=$1
7+
68
function update_repository() {
79
DIRECTORY=$1
810
REPOSITORY=$2
@@ -74,23 +76,31 @@ echo "::group::Update source code repositories"
7476
mkdir -p "$SOURCE_PATH"
7577

7678
cd "$SOURCE_PATH"
77-
update_repository binutils $BINUTILS_REPO $BINUTILS_BRANCH $BINUTILS_BASE_BRANCH
78-
update_repository gcc $GCC_REPO $GCC_BRANCH $GCC_BASE_BRANCH
79-
update_repository mingw $MINGW_REPO $MINGW_BRANCH $MINGW_BASE_BRANCH
80-
if [[ "$PLATFORM" =~ cygwin ]]; then
81-
update_repository cygwin $CYGWIN_REPO $CYGWIN_BRANCH $CYGWIN_BASE_BRANCH
82-
update_repository cygwin-packages $CYGWIN_PACKAGES_REPO $CYGWIN_PACKAGES_BRANCH $CYGWIN_PACKAGES_BASE_BRANCH
83-
update_repository cocom $COCOM_REPO $COCOM_BRANCH $COCOM_BASE_BRANCH
84-
fi
8579

86-
if [[ "$UPDATE_LIBRARIES" = 1 ]]; then
87-
update_repository openblas $OPENBLAS_REPO $OPENBLAS_BRANCH
88-
update_repository zlib $ZLIB_REPO $ZLIB_BRANCH
89-
update_repository libxml2 $LIBXML2_REPO $LIBXML2_BRANCH
90-
update_repository openssl $OPENSSL_REPO $OPENSSL_BRANCH
91-
update_repository libjpeg-turbo $LIBJPEG_TURBO_REPO $LIBJPEG_TURBO_BRANCH
92-
update_repository ffmpeg $FFMPEG_REPO $FFMPEG_BRANCH
93-
update_repository bash $BASH_REPO $BASH_BRANCH
80+
if [[ -n "$PROJECT" ]]; then
81+
REPO=${PROJECT^^}_REPO
82+
BRANCH=${PROJECT^^}_BRANCH
83+
BASE_BRANCH=${PROJECT^^}_BASE_BRANCH
84+
update_repository $PROJECT ${!REPO} ${!BRANCH} ${!BASE_BRANCH}
85+
else
86+
update_repository binutils $BINUTILS_REPO $BINUTILS_BRANCH $BINUTILS_BASE_BRANCH
87+
update_repository gcc $GCC_REPO $GCC_BRANCH $GCC_BASE_BRANCH
88+
update_repository mingw $MINGW_REPO $MINGW_BRANCH $MINGW_BASE_BRANCH
89+
if [[ "$PLATFORM" =~ cygwin ]]; then
90+
update_repository cygwin $CYGWIN_REPO $CYGWIN_BRANCH $CYGWIN_BASE_BRANCH
91+
update_repository cygwin-packages $CYGWIN_PACKAGES_REPO $CYGWIN_PACKAGES_BRANCH $CYGWIN_PACKAGES_BASE_BRANCH
92+
update_repository cocom $COCOM_REPO $COCOM_BRANCH $COCOM_BASE_BRANCH
93+
fi
94+
95+
if [[ "$UPDATE_LIBRARIES" = 1 ]]; then
96+
update_repository openblas $OPENBLAS_REPO $OPENBLAS_BRANCH
97+
update_repository zlib $ZLIB_REPO $ZLIB_BRANCH
98+
update_repository libxml2 $LIBXML2_REPO $LIBXML2_BRANCH
99+
update_repository openssl $OPENSSL_REPO $OPENSSL_BRANCH
100+
update_repository libjpeg-turbo $LIBJPEG_TURBO_REPO $LIBJPEG_TURBO_BRANCH
101+
update_repository ffmpeg $FFMPEG_REPO $FFMPEG_BRANCH
102+
update_repository bash $BASH_REPO $BASH_BRANCH
103+
fi
94104
fi
95105
echo "::endgroup::"
96106

.github/workflows/advanced.yml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,96 @@ jobs:
513513
run: |
514514
.github/scripts/tests/cygwin/execute-tests.sh
515515
516+
execute-cygwin-tests:
517+
needs: [
518+
build-toolchain
519+
]
520+
# Requirements for the runner:
521+
# - The runner must have WSL1 with Ubuntu 24.04 distribution installed.
522+
# - There must be user `runner` created in the WSL as the primary one.
523+
# - This `runner` user must be able to perform `sudo apt` without blocking terminal.
524+
runs-on: [Windows, WSL, ARM64]
525+
526+
defaults:
527+
run:
528+
# Run the job script created by the GitHub Actions runner as a `runner`
529+
# user in WSL. As this script is created on Windows, CRLF characters
530+
# need to be converted to LF and its path translated to WSL format.
531+
shell: wsl --user runner bash --noprofile --norc -euo pipefail "$(s="$(wslpath '{0}')" && sed -i 's/\r$//' "$s" && echo "$s")"
532+
533+
env:
534+
PLATFORM: pc-cygwin
535+
ROOT_PATH: /home/runner
536+
SOURCE_PATH:
537+
BUILD_PATH:
538+
BUILD_PACKAGE_NAME: cygwin-build.tar.gz
539+
TOOLCHAIN_PATH:
540+
TOOLCHAIN_NAME: aarch64-pc-cygwin-msvcrt
541+
TOOLCHAIN_PACKAGE_NAME: aarch64-pc-cygwin-msvcrt-toolchain.tar.gz
542+
543+
WSLENV: CYGWIN_REPO:CYGWIN_BRANCH:PLATFORM:ROOT_PATH:SOURCE_PATH/p:BUILD_PATH/p:BUILD_PACKAGE_NAME:ARTIFACT_PATH/p:TOOLCHAIN_PATH/p:TOOLCHAIN_NAME:TOOLCHAIN_PACKAGE_NAME:GITHUB_ENV/p:GITHUB_OUTPUT/p:GITHUB_STEP_SUMMARY/p
544+
545+
steps:
546+
- name: Checkout repository
547+
uses: actions/checkout@v4
548+
with:
549+
path: ${{ github.workspace }}
550+
551+
- name: Install zstd
552+
shell: powershell
553+
run: |
554+
.github/scripts/install-zstd.ps1
555+
556+
- name: Clean previous build
557+
run: |
558+
.github/scripts/delete-build.sh
559+
.github/scripts/delete-code.sh
560+
561+
- name: Install dependencies
562+
run: |
563+
.github/scripts/install-dependencies.sh
564+
565+
- name: Extract cache keys
566+
run: |
567+
.github/scripts/extract-cache-keys.sh '${{ toJSON(needs.build-toolchain.outputs) }}'
568+
569+
- name: Download ${{ env.TOOLCHAIN_NAME }} toolchain
570+
uses: actions/cache/restore@v4
571+
with:
572+
path: ${{ env.RELATIVE_ARTIFACT_PATH }}/${{ env.TOOLCHAIN_PACKAGE_NAME }}
573+
key: ${{ env.toolchain-cache-key }}
574+
enableCrossOsArchive: true
575+
fail-on-cache-miss: true
576+
577+
- name: Unpack toolchain
578+
run: |
579+
.github/scripts/toolchain/unpack.sh
580+
581+
- name: Checkout Cygwin
582+
run: |
583+
.github/scripts/update-sources.sh cygwin
584+
585+
- name: Build Cygwin
586+
run: |
587+
.github/scripts/toolchain/build-cygwin.sh 2
588+
589+
- name: Execute Cygwin tests
590+
run: |
591+
.github/scripts/toolchain/execute-cygwin-tests.sh
592+
593+
- name: Pack build folder
594+
if: failure()
595+
run: |
596+
.github/scripts/pack-build.sh
597+
598+
- name: Upload build folder
599+
if: failure()
600+
uses: actions/upload-artifact@v4
601+
with:
602+
name: cygwin-build
603+
retention-days: 1
604+
path: ${{ env.ARTIFACT_PATH }}/${{ env.BUILD_PACKAGE_NAME }}
605+
516606
build-bash:
517607
needs: [build-toolchain]
518608
runs-on: ubuntu-24.04-arm

0 commit comments

Comments
 (0)