GCC-Based Cross Building #126
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # .github/workflows/cross.yaml | |
| name: GCC-Based Cross Building | |
| on: | |
| workflow_dispatch: NULL | |
| defaults: | |
| run: { shell: bash } | |
| jobs: | |
| build: | |
| name: Ubuntu ${{matrix.compiler.os}}, gcc-${{matrix.compiler.ver}} => ${{matrix.target.triple}} (${{matrix.target.be && 'B' || 'L'}}E) | |
| strategy: | |
| fail-fast: FALSE | |
| matrix: | |
| target: | |
| - { triple: aarch64-linux-gnu, ld: ld-linux-aarch64.so.1 } | |
| - { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| - { triple: powerpc64le-linux-gnu, ld: ld64.so.2 } | |
| - { triple: riscv64-linux-gnu, ld: ld-linux-riscv64-lp64d.so.1 } | |
| - { triple: mipsel-linux-gnu, ld: ld.so.1 } | |
| - { triple: mips64el-linux-gnuabi64, ld: ../lib64/ld.so.1 } | |
| - { triple: mipsisa32r6el-linux-gnu, ld: ld-linux-mipsn8.so.1 } | |
| - { triple: alpha-linux-gnu, ld: ld-linux.so.2 } | |
| - { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a -mthumb' } | |
| - { triple: mipsisa64r6el-linux-gnuabi64, ld: ../lib64/ld-linux-mipsn8.so.1 } | |
| - { triple: loongarch64-linux-gnu, ld: ld-linux-loongarch-lp64d.so.1 } | |
| - { triple: sh4-linux-gnu, ld: ld-linux.so.2 } | |
| - { be: TRUE, triple: s390x-linux-gnu, ld: ld64.so.1 } | |
| - { be: TRUE, triple: powerpc64-linux-gnu, ld: ld64.so.1 } | |
| - { be: TRUE, triple: powerpc-linux-gnu, ld: ld.so.1 } | |
| - { be: TRUE, triple: sparc64-linux-gnu, ld: ../lib64/ld-linux.so.2 } | |
| - { be: TRUE, triple: mips-linux-gnu, ld: ld.so.1 } | |
| - { be: TRUE, triple: mips64-linux-gnuabi64, ld: ../lib64/ld.so.1 } | |
| - { be: TRUE, triple: mipsisa32r6-linux-gnu, ld: ld-linux-mipsn8.so.1 } | |
| - { be: TRUE, triple: mipsisa64r6-linux-gnuabi64, ld: ../lib64/ld-linux-mipsn8.so.1 } | |
| - { be: TRUE, triple: m68k-linux-gnu, ld: ld.so.1, march: '-msoft-float' } | |
| - { be: TRUE, triple: hppa-linux-gnu, ld: ld.so.1 } | |
| compiler: | |
| - { ver: '9', os: '22.04' } | |
| - { ver: '10', os: '22.04' } | |
| - { ver: '11', os: '22.04' } | |
| - { ver: '12', os: '22.04' } | |
| - { ver: '9', os: '24.04' } | |
| - { ver: '10', os: '24.04' } | |
| - { ver: '11', os: '24.04' } | |
| - { ver: '12', os: '24.04' } | |
| - { ver: '13', os: '24.04' } | |
| - { ver: '14', os: '24.04' } | |
| exclude: | |
| - target: { triple: mipsel-linux-gnu } | |
| compiler: { ver: '11', os: '22.04' } | |
| - target: { triple: mipsel-linux-gnu } | |
| compiler: { ver: '12', os: '22.04' } | |
| - target: { triple: mips64el-linux-gnuabi64 } | |
| compiler: { ver: '11', os: '22.04' } | |
| - target: { triple: mips64el-linux-gnuabi64 } | |
| compiler: { ver: '12', os: '22.04' } | |
| - target: { triple: mips-linux-gnu } | |
| compiler: { ver: '11', os: '22.04' } | |
| - target: { triple: mips-linux-gnu } | |
| compiler: { ver: '12', os: '22.04' } | |
| - target: { triple: mips64-linux-gnuabi64 } | |
| compiler: { ver: '11', os: '22.04' } | |
| - target: { triple: mips64-linux-gnuabi64 } | |
| compiler: { ver: '12', os: '22.04' } | |
| - target: { triple: mipsisa64r6el-linux-gnuabi64 } | |
| compiler: { ver: '11', os: '22.04' } | |
| - target: { triple: mipsisa64r6el-linux-gnuabi64 } | |
| compiler: { ver: '12', os: '22.04' } | |
| - target: { triple: mipsisa64r6-linux-gnuabi64 } | |
| compiler: { ver: '11', os: '22.04' } | |
| - target: { triple: mipsisa64r6-linux-gnuabi64 } | |
| compiler: { ver: '12', os: '22.04' } | |
| - target: { triple: mipsisa32r6-linux-gnu } | |
| compiler: { os: '22.04' } | |
| - target: { triple: mipsisa32r6el-linux-gnu } | |
| compiler: { os: '22.04' } | |
| - target: { triple: sparc64-linux-gnu } | |
| compiler: { os: '22.04' } | |
| - target: { triple: m68k-linux-gnu } | |
| compiler: { os: '22.04' } | |
| - target: { triple: loongarch64-linux-gnu } | |
| - target: { triple: sh4-linux-gnu } | |
| include: | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '9', os: '22.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '10', os: '22.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '11', os: '22.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '12', os: '22.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '9', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '10', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '11', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '12', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '13', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabihf, ld: ld-linux-armhf.so.3 } | |
| compiler: { ver: '14', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '9', os: '22.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '10', os: '22.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '11', os: '22.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '12', os: '22.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '9', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '10', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '11', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '12', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '13', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: arm-linux-gnueabi, ld: ld-linux.so.3, march: '-march=armv7-a' } | |
| compiler: { ver: '14', os: '24.04-arm' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '9', os: '22.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '10', os: '22.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '11', os: '22.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '12', os: '22.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '9', os: '24.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '10', os: '24.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '11', os: '24.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '12', os: '24.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '13', os: '24.04' } | |
| noqemu: TRUE | |
| - target: { triple: i686-linux-gnu, ld: ld-linux.so.2, march: '-msse2 -mfpmath=sse' } | |
| compiler: { ver: '14', os: '24.04' } | |
| noqemu: TRUE | |
| - target: { triple: loongarch64-linux-gnu, ld: ld-linux-loongarch-lp64d.so.1 } | |
| compiler: { ver: '13', os: '24.04' } | |
| - target: { triple: loongarch64-linux-gnu, ld: ld-linux-loongarch-lp64d.so.1 } | |
| compiler: { ver: '14', os: '24.04' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '9', os: '22.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '10', os: '22.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '11', os: '22.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '12', os: '22.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '9', os: '24.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '10', os: '24.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '11', os: '24.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '12', os: '24.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '13', os: '24.04-arm' } | |
| - target: { triple: x86_64-linux-gnu, ld: ld-linux-x86-64.so.2 } | |
| compiler: { ver: '14', os: '24.04-arm' } | |
| runs-on: ubuntu-${{matrix.compiler.os}} | |
| steps: | |
| - name: Machine Information | |
| run: | | |
| exec 2>&1 | |
| set -x | |
| lscpu; free -h; df -H . | |
| - name: System Information | |
| run: | | |
| exec 2>&1 | |
| date; uname -a; uptime | |
| set -x | |
| systemd-detect-virt || : | |
| cat /etc/os-release | |
| ls -C /boot || : | |
| - name: Context Information | |
| run: | | |
| exec 2>&1 | |
| tty || :; id; printf %s\\n SHELL="$SHELL" PATH="$PATH" | |
| set -x | |
| pwd | |
| ps -e --sort ppid,pid -o ppid,pid,user:12,group:12,comm:24,rsz:11,vsz:11,thcount,bsdstart,state,tname | |
| - name: Update Package DB | |
| run: | | |
| exec 2>&1 | |
| set -x | |
| sudo sed -i /azure/d /etc/apt/apt-mirrors.txt | |
| printf -- %s' ports.ubuntu.com\n' ${{vars.ip_ports_ubuntu_com}} | sudo tee -a /etc/hosts >/dev/null | |
| sudo apt-get -oDpkg::Use-Pty=0 update | |
| - name: Install Build Dependencies | |
| run: | | |
| exec 2>&1 | |
| triple=${{matrix.target.triple}} | |
| set -x | |
| sudo apt-get -oDpkg::Use-Pty=0 install g++-${{matrix.compiler.ver}}-${triple//_/-} | |
| - name: Install QEMU | |
| if: (!matrix.noqemu) | |
| run: | | |
| exec 2>&1 | |
| sudo apt-get -oDpkg::Use-Pty=0 install qemu-user | |
| - name: Build Tools Information | |
| run: | | |
| exec 2>&1 | |
| make --version; ${{matrix.target.triple}}-gcc-${{matrix.compiler.ver}} --version | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Run Make and Check | |
| timeout-minutes: 20 | |
| if: false | |
| run: | | |
| exec 2>&1 | |
| set -x | |
| tee hi.cc <<'END' >/dev/null | |
| # include <cstdio> | |
| int main() { | |
| std::puts("Hi"); | |
| return 0; | |
| } | |
| END | |
| ${{matrix.target.triple}}-g++-${{matrix.compiler.ver}} -{pipe,Wno-psabi} \ | |
| ${{matrix.target.march}} -Wl,-{I/usr/${{matrix.target.triple}}/lib/${{matrix.target.ld}},R/usr/${{matrix.target.triple}}/lib} \ | |
| -pthread --std=c++17 \ | |
| -{O3,f{no-{math-errno,stack-protector},cf-protection=none,no-stack-clash-protection},U_FORTIFY_SOURCE} \ | |
| -include prelude.cc \ | |
| -{S,o-} -Werror hi.cc | |
| ${{matrix.target.triple}}-g++-${{matrix.compiler.ver}} -pipe -Wno-psabi \ | |
| ${{matrix.target.march}} -Wl,-{I/usr/${{matrix.target.triple}}/lib/${{matrix.target.ld}},R/usr/${{matrix.target.triple}}/lib} \ | |
| -pthread --std=c++17 \ | |
| -{O3,f{no-{math-errno,stack-protector},cf-protection=none,no-stack-clash-protection},U_FORTIFY_SOURCE} \ | |
| -include prelude.cc \ | |
| -rdynamic -s -Wl,--as-needed -l{m,dl,rt} \ | |
| hi.cc | |
| file a.out | |
| ./a.out | |
| - name: Checkout | |
| if: (!matrix.target.be) | |
| uses: actions/checkout@v4 | |
| with: { ref: master } | |
| - name: Run Make and Check | |
| if: (!matrix.target.be) | |
| run: | | |
| exec 2>&1 | |
| set -x | |
| make -{j4,Otarget} \ | |
| GCC=${{matrix.target.triple}}-gcc-${{matrix.compiler.ver}} \ | |
| GXX=${{matrix.target.triple}}-g++-${{matrix.compiler.ver}} \ | |
| MARCH='${{matrix.target.march}} -Wl,-I/usr/${{matrix.target.triple}}/lib/${{matrix.target.ld}} -Wl,-rpath=/usr/${{matrix.target.triple}}/lib' \ | |
| run |