1
- # Cross-platform testing for quaddtype on big-endian architectures using QEMU.
2
- # This workflow focuses specifically on big-endian systems to test byte order handling
3
- # in quad precision operations, since little-endian systems are already covered by standard CI.
4
-
5
1
name : Big-Endian Architecture Tests
6
2
7
3
on :
@@ -35,14 +31,14 @@ jobs:
35
31
- [
36
32
" s390x (IBM Z Big Endian)" ,
37
33
" s390x-linux-gnu" ,
38
- " s390x/ubuntu:22.04" ,
39
- " s390x"
34
+ " s390x/ubuntu:22.04" ,
35
+ " s390x" ,
40
36
]
41
37
- [
42
38
" s390x - baseline(Z13)" ,
43
39
" s390x-linux-gnu" ,
44
40
" s390x/ubuntu:22.04" ,
45
- " s390x"
41
+ " s390x" ,
46
42
]
47
43
env :
48
44
ARCH_NAME : ${{ matrix.BUILD_PROP[0] }}
@@ -53,94 +49,94 @@ jobs:
53
49
54
50
name : " ${{ matrix.BUILD_PROP[0] }}"
55
51
steps :
56
- - uses : actions/checkout@v4
57
- with :
58
- submodules : recursive
59
- fetch-tags : true
60
- persist-credentials : false
61
-
62
- - name : Initialize binfmt_misc for qemu-user-static
63
- run : |
64
- # Enable QEMU user-mode emulation for cross-architecture execution
65
- docker run --rm --privileged tonistiigi/binfmt:qemu-v9.2.2-52 --install all
52
+ - uses : actions/checkout@v4
53
+ with :
54
+ submodules : recursive
55
+ fetch-tags : true
56
+ persist-credentials : false
66
57
67
- - name : Install cross-compilation toolchain
68
- run : |
69
- sudo apt update
70
- sudo apt install -y ninja-build gcc-${TOOLCHAIN_NAME} g++-${TOOLCHAIN_NAME} gfortran-${TOOLCHAIN_NAME}
58
+ - name : Initialize binfmt_misc for qemu-user-static
59
+ run : |
60
+ # Enable QEMU user-mode emulation for cross-architecture execution
61
+ docker run --rm --privileged tonistiigi/binfmt:qemu-v9.2.2-52 --install all
71
62
72
- - name : Cache docker container
73
- uses : actions/cache@v4
74
- id : container-cache
75
- with :
76
- path : ~/docker_${{ matrix.BUILD_PROP[1] }}
77
- key : container-quaddtype-${{ runner.os }}-${{ matrix.BUILD_PROP[1] }}-${{ matrix.BUILD_PROP[2] }}-${{ hashFiles('quaddtype/pyproject.toml') }}
63
+ - name : Install cross-compilation toolchain
64
+ run : |
65
+ sudo apt update
66
+ sudo apt install -y ninja-build gcc-${TOOLCHAIN_NAME} g++-${TOOLCHAIN_NAME} gfortran-${TOOLCHAIN_NAME}
78
67
79
- - name : Create cross-compilation container
80
- if : steps.container-cache.outputs.cache-hit != 'true'
81
- run : |
82
- docker run --platform=linux/${ARCH} --name quaddtype_container --interactive \
83
- -v /:/host -v $(pwd):/workspace ${DOCKER_CONTAINER} /bin/bash -c "
84
- # Update package manager and install essential tools
85
- apt update &&
86
- apt install -y cmake git python3 python-is-python3 python3-dev python3-pip build-essential &&
87
-
88
- # Create necessary symlinks for cross-compilation
89
- mkdir -p /lib64 && ln -sf /host/lib64/ld-* /lib64/ || true &&
90
- ln -sf /host/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu || true &&
91
-
92
- # Link cross-compilation toolchain from host
93
- rm -rf /usr/${TOOLCHAIN_NAME} && ln -sf /host/usr/${TOOLCHAIN_NAME} /usr/${TOOLCHAIN_NAME} &&
94
- rm -rf /usr/lib/gcc/${TOOLCHAIN_NAME} && ln -sf /host/usr/lib/gcc-cross/${TOOLCHAIN_NAME} /usr/lib/gcc/${TOOLCHAIN_NAME} &&
95
-
96
- # Set up compiler symlinks
97
- rm -f /usr/bin/gcc && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-gcc /usr/bin/gcc &&
98
- rm -f /usr/bin/g++ && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-g++ /usr/bin/g++ &&
99
- rm -f /usr/bin/gfortran && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-gfortran /usr/bin/gfortran &&
100
-
101
- # Set up binutils
102
- rm -f /usr/bin/ar && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-ar /usr/bin/ar &&
103
- rm -f /usr/bin/as && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-as /usr/bin/as &&
104
- rm -f /usr/bin/ld && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-ld /usr/bin/ld &&
105
- rm -f /usr/bin/ld.bfd && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-ld.bfd /usr/bin/ld.bfd &&
106
-
107
- # Link build tools
108
- rm -f /usr/bin/ninja && ln -sf /host/usr/bin/ninja /usr/bin/ninja &&
109
- rm -f /usr/local/bin/ninja && mkdir -p /usr/local/bin && ln -sf /host/usr/bin/ninja /usr/local/bin/ninja &&
110
-
111
- # Configure git for workspace access
112
- git config --global --add safe.directory /workspace &&
113
-
114
- # Install Python build dependencies
115
- python -m pip install --upgrade pip &&
116
- python -m pip install meson>=1.3.2 meson-python wheel numpy &&
117
- python -m pip install pytest pytest-run-parallel pytest-timeout &&
118
-
119
- # Install system dependencies for quaddtype (SLEEF dependencies)
120
- apt install -y libssl-dev libfftw3-dev pkg-config
121
- "
122
- docker commit quaddtype_container quaddtype_container
123
- mkdir -p "~/docker_${TOOLCHAIN_NAME}"
124
- docker save -o "~/docker_${TOOLCHAIN_NAME}/quaddtype_container.tar" quaddtype_container
68
+ - name : Cache docker container
69
+ uses : actions/cache@v4
70
+ id : container-cache
71
+ with :
72
+ path : ~/docker_${{ matrix.BUILD_PROP[1] }}
73
+ key : container-quaddtype-${{ runner.os }}-${{ matrix.BUILD_PROP[1] }}-${{ matrix.BUILD_PROP[2] }}-${{ hashFiles('quaddtype/pyproject.toml') }}
125
74
126
- - name : Load container from cache
127
- if : steps.container-cache.outputs.cache-hit == 'true'
128
- run : docker load -i "~/docker_${TOOLCHAIN_NAME}/quaddtype_container.tar"
129
-
130
- - name : Build quaddtype with cross-compilation and testing
131
- run : |
132
- docker run --rm --platform=linux/${ARCH} -e "TERM=xterm-256color" \
133
- -v $(pwd):/workspace -v /:/host quaddtype_container \
134
- /bin/script -e -q -c "/bin/bash --noprofile --norc -eo pipefail -c '
135
- cd /workspace/quaddtype &&
136
- echo \"Building quaddtype for ${ARCH_NAME}...\" &&
75
+ - name : Create cross-compilation container
76
+ if : steps.container-cache.outputs.cache-hit != 'true'
77
+ run : |
78
+ docker run --platform=linux/${ARCH} --name quaddtype_container --interactive \
79
+ -v /:/host -v $(pwd):/workspace ${DOCKER_CONTAINER} /bin/bash -c "
80
+ # Update package manager and install essential tools
81
+ apt update &&
82
+ apt install -y cmake git python3 python-is-python3 python3-dev python3-pip build-essential &&
83
+
84
+ # Create necessary symlinks for cross-compilation
85
+ mkdir -p /lib64 && ln -sf /host/lib64/ld-* /lib64/ || true &&
86
+ ln -sf /host/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu || true &&
87
+
88
+ # Link cross-compilation toolchain from host
89
+ rm -rf /usr/${TOOLCHAIN_NAME} && ln -sf /host/usr/${TOOLCHAIN_NAME} /usr/${TOOLCHAIN_NAME} &&
90
+ rm -rf /usr/lib/gcc/${TOOLCHAIN_NAME} && ln -sf /host/usr/lib/gcc-cross/${TOOLCHAIN_NAME} /usr/lib/gcc/${TOOLCHAIN_NAME} &&
137
91
138
- # Set OpenMP linking for cross-compilation
139
- export LDFLAGS=\"-fopenmp\" &&
92
+ # Set up compiler symlinks
93
+ rm -f /usr/bin/gcc && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-gcc /usr/bin/gcc &&
94
+ rm -f /usr/bin/g++ && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-g++ /usr/bin/g++ &&
95
+ rm -f /usr/bin/gfortran && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-gfortran /usr/bin/gfortran &&
140
96
141
- # Install quaddtype with test dependencies
142
- python -m pip install .[test] -v --no-build-isolation --force-reinstall
97
+ # Set up binutils
98
+ rm -f /usr/bin/ar && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-ar /usr/bin/ar &&
99
+ rm -f /usr/bin/as && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-as /usr/bin/as &&
100
+ rm -f /usr/bin/ld && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-ld /usr/bin/ld &&
101
+ rm -f /usr/bin/ld.bfd && ln -sf /host/usr/bin/${TOOLCHAIN_NAME}-ld.bfd /usr/bin/ld.bfd &&
143
102
144
- cd ..
145
- python -m pytest -vvv --color=yes --timeout=600 --tb=short quaddtype/tests/
146
- '"
103
+ # Link build tools
104
+ rm -f /usr/bin/ninja && ln -sf /host/usr/bin/ninja /usr/bin/ninja &&
105
+ rm -f /usr/local/bin/ninja && mkdir -p /usr/local/bin && ln -sf /host/usr/bin/ninja /usr/local/bin/ninja &&
106
+
107
+ # Configure git for workspace access
108
+ git config --global --add safe.directory /workspace &&
109
+
110
+ # Install Python build dependencies
111
+ python -m pip install --upgrade pip &&
112
+ python -m pip install meson>=1.3.2 meson-python wheel numpy &&
113
+ python -m pip install pytest pytest-run-parallel pytest-timeout &&
114
+
115
+ # Install system dependencies for quaddtype (SLEEF dependencies)
116
+ apt install -y libssl-dev libfftw3-dev pkg-config
117
+ "
118
+ docker commit quaddtype_container quaddtype_container
119
+ mkdir -p "~/docker_${TOOLCHAIN_NAME}"
120
+ docker save -o "~/docker_${TOOLCHAIN_NAME}/quaddtype_container.tar" quaddtype_container
121
+
122
+ - name : Load container from cache
123
+ if : steps.container-cache.outputs.cache-hit == 'true'
124
+ run : docker load -i "~/docker_${TOOLCHAIN_NAME}/quaddtype_container.tar"
125
+
126
+ - name : Build quaddtype with cross-compilation and testing
127
+ run : |
128
+ docker run --rm --platform=linux/${ARCH} -e "TERM=xterm-256color" \
129
+ -v $(pwd):/workspace -v /:/host quaddtype_container \
130
+ /bin/script -e -q -c "/bin/bash --noprofile --norc -eo pipefail -c '
131
+ cd /workspace/quaddtype &&
132
+ echo \"Building quaddtype for ${ARCH_NAME}...\" &&
133
+
134
+ # Set OpenMP linking for cross-compilation
135
+ export LDFLAGS=\"-fopenmp\" &&
136
+
137
+ # Install quaddtype with test dependencies
138
+ python -m pip install .[test] -v --no-build-isolation --force-reinstall
139
+
140
+ cd ..
141
+ python -m pytest -vvv --color=yes --timeout=600 --tb=short quaddtype/tests/
142
+ '"
0 commit comments