123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- # Copyright 2021-2023 The OpenSSL Project Authors. All Rights Reserved.
- #
- # Licensed under the Apache License 2.0 (the "License"). You may not use
- # this file except in compliance with the License. You can obtain a copy
- # in the file LICENSE in the source distribution or at
- # https://www.openssl.org/source/license.html
- name: Cross Compile
- on: [pull_request, push]
- permissions:
- contents: read
- jobs:
- cross-compilation:
- strategy:
- fail-fast: false
- matrix:
- # The platform matrix specifies:
- # arch: the architecture to build for, this defines the tool-chain
- # prefix {arch}- and the Debian compiler package gcc-{arch}
- # name.
- # libs: the Debian package for the necessary link/runtime libraries.
- # target: the OpenSSL configuration target to use, this is passed
- # directly to the config command line.
- # fips: set to "no" to disable building FIPS, leave unset to
- # build the FIPS provider.
- # tests: omit this to run all the tests using QEMU, set it to "none"
- # to never run the tests, otherwise its value is passed to
- # the "make test" command to allow selective disabling of
- # tests.
- # qemucpu: optional; string that describes CPU properties.
- # The string will be used to set the QEMU_CPU variable.
- # opensslcapsname: optional; string that describes the postfix of the
- # OpenSSL environment variable that defines CPU
- # capabilities. E.g. "foo" will result in an
- # environment variable with the name OPENSSL_foo.
- # opensslcaps: optional; if opensslcapsname (see above) is set, then
- # this string will be used as content for the OpenSSL
- # capabilities variable.
- # ppa: Launchpad PPA repository to download packages from.
- platform: [
- {
- arch: i386-pc-msdosdjgpp,
- libs: libc-djgpp-dev libwatt-djgpp-dev djgpp-utils,
- target: no-threads 386 DJGPP,
- tests: none,
- ppa: jwt27/djgpp-toolchain
- }, {
- arch: aarch64-linux-gnu,
- libs: libc6-dev-arm64-cross,
- target: linux-aarch64
- }, {
- arch: alpha-linux-gnu,
- libs: libc6.1-dev-alpha-cross,
- target: linux-alpha-gcc
- }, {
- arch: arm-linux-gnueabi,
- libs: libc6-dev-armel-cross,
- target: linux-armv4,
- tests: -test_includes -test_store -test_x509_store
- }, {
- arch: arm-linux-gnueabihf,
- libs: libc6-dev-armhf-cross,
- target: linux-armv4,
- tests: -test_includes -test_store -test_x509_store
- }, {
- arch: hppa-linux-gnu,
- libs: libc6-dev-hppa-cross,
- target: -static linux-generic32,
- fips: no,
- tests: -test_includes -test_store -test_x509_store
- }, {
- arch: m68k-linux-gnu,
- libs: libc6-dev-m68k-cross,
- target: -static -m68040 linux-latomic -Wno-stringop-overflow,
- fips: no,
- tests: -test_includes -test_store -test_x509_store
- }, {
- arch: mips-linux-gnu,
- libs: libc6-dev-mips-cross,
- target: -static linux-mips32,
- fips: no,
- tests: -test_includes -test_store -test_x509_store
- }, {
- arch: mips64-linux-gnuabi64,
- libs: libc6-dev-mips64-cross,
- target: -static linux64-mips64,
- fips: no
- }, {
- arch: mipsel-linux-gnu,
- libs: libc6-dev-mipsel-cross,
- target: linux-mips32,
- tests: -test_includes -test_store -test_x509_store
- }, {
- arch: powerpc64le-linux-gnu,
- libs: libc6-dev-ppc64el-cross,
- # The default compiler for this platform on Ubuntu 20.04 seems
- # buggy and causes test failures. Dropping the optimisation level
- # resolves it.
- target: -O2 linux-ppc64le
- }, {
- arch: riscv64-linux-gnu,
- libs: libc6-dev-riscv64-cross,
- target: linux64-riscv64
- }, {
- arch: s390x-linux-gnu,
- libs: libc6-dev-s390x-cross,
- target: linux64-s390x -Wno-stringop-overflow
- }, {
- arch: sh4-linux-gnu,
- libs: libc6-dev-sh4-cross,
- target: no-async linux-latomic,
- tests: -test_includes -test_store -test_x509_store
- },
- # These build with shared libraries but they crash when run
- # They mirror static builds above in order to cover more of the
- # code base.
- {
- arch: hppa-linux-gnu,
- libs: libc6-dev-hppa-cross,
- target: linux-generic32,
- tests: none
- }, {
- arch: m68k-linux-gnu,
- libs: libc6-dev-m68k-cross,
- target: -mcfv4e linux-latomic -Wno-stringop-overflow no-quic,
- tests: none
- }, {
- arch: mips-linux-gnu,
- libs: libc6-dev-mips-cross,
- target: linux-mips32,
- tests: none
- }, {
- arch: mips64-linux-gnuabi64,
- libs: libc6-dev-mips64-cross,
- target: linux64-mips64,
- tests: none
- },
- # This build doesn't execute either with or without shared libraries.
- {
- arch: sparc64-linux-gnu,
- libs: libc6-dev-sparc64-cross,
- target: linux64-sparcv9,
- tests: none
- }
- ]
- runs-on: ${{ github.server_url == 'https://github.com' && 'ubuntu-latest' || 'ubuntu-22.04-self-hosted' }}
- steps:
- - name: install package repository
- if: matrix.platform.ppa != ''
- run: |
- sudo add-apt-repository ppa:${{ matrix.platform.ppa }}
- - name: install packages
- run: |
- sudo apt-get update
- sudo apt-get -yq --force-yes install \
- gcc-${{ matrix.platform.arch }} \
- ${{ matrix.platform.libs }}
- - uses: actions/checkout@v4
- - name: checkout fuzz/corpora submodule
- run: git submodule update --init --depth 1 fuzz/corpora
- - name: config with FIPS
- if: matrix.platform.fips != 'no'
- run: |
- ./config --banner=Configured --strict-warnings enable-fips \
- --cross-compile-prefix=${{ matrix.platform.arch }}- \
- ${{ matrix.platform.target }}
- - name: config without FIPS
- if: matrix.platform.fips == 'no'
- run: |
- ./config --banner=Configured --strict-warnings \
- --cross-compile-prefix=${{ matrix.platform.arch }}- \
- ${{ matrix.platform.target }}
- - name: config dump
- run: ./configdata.pm --dump
- - name: make
- run: make -s -j4
- - name: install qemu
- if: matrix.platform.tests != 'none'
- run: sudo apt-get -yq --force-yes install qemu-user
- - name: Set QEMU environment
- if: matrix.platform.qemucpu != ''
- run: echo "QEMU_CPU=${{ matrix.platform.qemucpu }}" >> $GITHUB_ENV
- - name: Set OpenSSL caps environment
- if: matrix.platform.opensslcapsname != ''
- run: echo "OPENSSL_${{ matrix.platform.opensslcapsname }}=\
- ${{ matrix.platform.opensslcaps }}" >> $GITHUB_ENV
- - name: get cpu info
- run: cat /proc/cpuinfo
- - name: make all tests
- if: github.event_name == 'push' && matrix.platform.tests == ''
- run: |
- .github/workflows/make-test \
- TESTS="-test_afalg" \
- QEMU_LD_PREFIX=/usr/${{ matrix.platform.arch }}
- - name: make some tests
- if: github.event_name == 'push' && matrix.platform.tests != 'none' && matrix.platform.tests != ''
- run: |
- .github/workflows/make-test \
- TESTS="${{ matrix.platform.tests }} -test_afalg" \
- QEMU_LD_PREFIX=/usr/${{ matrix.platform.arch }}
- - name: make evp tests
- if: github.event_name == 'pull_request' && matrix.platform.tests != 'none'
- run: |
- .github/workflows/make-test \
- TESTS="test_evp*" \
- QEMU_LD_PREFIX=/usr/${{ matrix.platform.arch }}
- - name: save artifacts
- uses: actions/upload-artifact@v4
- with:
- name: "cross-compiles@${{ matrix.platform.arch }}"
- path: artifacts/
- if-no-files-found: ignore
|