summaryrefslogtreecommitdiffstats
path: root/.github/workflows/cross-compiles.yml
blob: 4a2cff96d8945c96284443d0c7910c47eade8f6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# Copyright 2021 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]

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.
        platform: [
          {
            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,
            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,
            target: 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
          }, {
            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,
            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: ubuntu-latest
    steps:
    - 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@v2

    - 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: github.event_name == 'push' && matrix.platform.tests != 'none'
      run: sudo apt-get -yq --force-yes install qemu-user

    - name: make all tests
      if: github.event_name == 'push' && matrix.platform.tests == ''
      run: |
        make test HARNESS_JOBS=${HARNESS_JOBS:-4} \
                  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: |
        make test HARNESS_JOBS=${HARNESS_JOBS:-4} \
                  TESTS="${{ matrix.platform.tests }} -test_afalg" \
                  QEMU_LD_PREFIX=/usr/${{ matrix.platform.arch }}