1name: build 2 3on: [push, pull_request] 4 5jobs: 6 build: 7 runs-on: ${{ matrix.os }} 8 9 strategy: 10 matrix: 11 os: [ubuntu-20.04, macos-10.15] 12 compiler: [gcc, clang] 13 buildtool: [autotools, cmake] 14 openssl: [openssl1, openssl3] 15 16 steps: 17 - uses: actions/checkout@v2 18 - name: Linux setup 19 if: runner.os == 'Linux' 20 run: | 21 sudo apt-get install \ 22 g++-10 \ 23 clang-10 \ 24 autoconf \ 25 automake \ 26 autotools-dev \ 27 libtool \ 28 pkg-config \ 29 libcunit1-dev \ 30 libssl-dev \ 31 libev-dev \ 32 cmake \ 33 cmake-data 34 - name: MacOS setup 35 if: runner.os == 'macOS' 36 run: | 37 brew install libev cunit autoconf automake pkg-config libtool 38 - name: Setup clang (Linux) 39 if: runner.os == 'Linux' && matrix.compiler == 'clang' 40 run: | 41 echo 'CC=clang-10' >> $GITHUB_ENV 42 echo 'CXX=clang++-10' >> $GITHUB_ENV 43 - name: Setup clang (MacOS) 44 if: runner.os == 'macOS' && matrix.compiler == 'clang' 45 run: | 46 echo 'CC=clang' >> $GITHUB_ENV 47 echo 'CXX=clang++' >> $GITHUB_ENV 48 - name: Setup gcc 49 if: runner.os == 'Linux' && matrix.compiler == 'gcc' 50 run: | 51 echo 'CC=gcc-10' >> $GITHUB_ENV 52 echo 'CXX=g++-10' >> $GITHUB_ENV 53 - name: Build OpenSSL v1.1.1 54 if: matrix.openssl == 'openssl1' 55 run: | 56 ./ci/build_openssl1.sh 57 - name: Build OpenSSL v3.0.0 58 if: matrix.openssl == 'openssl3' 59 run: | 60 ./ci/build_openssl3.sh 61 - name: Build GnuTLS 62 run: | 63 ./ci/build_gnutls.sh 64 - name: Build BoringSSL 65 run: | 66 ./ci/build_boringssl.sh 67 - name: Build nghttp3 68 run: | 69 ./ci/build_nghttp3.sh 70 - name: Setup environment variables 71 run: | 72 PKG_CONFIG_PATH="$PWD/openssl/build/lib/pkgconfig:$PWD/openssl/build/lib64/pkgconfig:$PWD/nghttp3/build/lib/pkgconfig:$PWD/gnutls-3.7.2/build/lib/pkgconfig:$PWD/nettle-3.6/build/lib64/pkgconfig" 73 LDFLAGS="$EXTRA_LDFLAGS -Wl,-rpath,$PWD/openssl/build/lib -Wl,-rpath,$PWD/openssl/build/lib64 -Wl,-rpath,$PWD/nettle-3.6/build/lib64" 74 BORINGSSL_CFLAGS="-I$PWD/boringssl/include/" 75 BORINGSSL_LIBS="-L$PWD/boringssl/build/ssl -lssl -L$PWD/boringssl/build/crypto -lcrypto" 76 77 echo 'PKG_CONFIG_PATH='"$PKG_CONFIG_PATH" >> $GITHUB_ENV 78 echo 'LDFLAGS='"$LDFLAGS" >> $GITHUB_ENV 79 echo 'BORINGSSL_CFLAGS='"$BORINGSSL_CFLAGS" >> $GITHUB_ENV 80 echo 'BORINGSSL_LIBS='"$BORINGSSL_LIBS" >> $GITHUB_ENV 81 - name: Enable ASAN 82 if: runner.os == 'Linux' 83 run: | 84 asanflags="-fsanitize=address,undefined -fno-sanitize-recover=undefined" 85 86 LDFLAGS="$LDFLAGS $asanflags" 87 CFLAGS="$CFLAGS $asanflags -g3" 88 CXXFLAGS="$CXXFLAGS $asanflags -g3" 89 90 echo 'LDFLAGS='"$LDFLAGS" >> $GITHUB_ENV 91 echo 'CFLAGS='"$CFLAGS" >> $GITHUB_ENV 92 echo 'CXXFLAGS='"$CXXFLAGS" >> $GITHUB_ENV 93 - name: BoringSSL pthread requirement 94 if: runner.os == 'Linux' 95 run: | 96 BORINGSSL_LIBS="$BORINGSSL_LIBS -pthread" 97 98 echo 'BORINGSSL_LIBS='"$BORINGSSL_LIBS" >> $GITHUB_ENV 99 - name: Configure autotools 100 if: matrix.buildtool == 'autotools' 101 run: | 102 autoreconf -i && \ 103 ./configure --enable-werror \ 104 --with-openssl --with-gnutls --with-boringssl 105 - name: Configure cmake 106 if: matrix.buildtool == 'cmake' 107 run: | 108 cmake $CMAKE_OPTS \ 109 -DBORINGSSL_LIBRARIES="$BORINGSSL_LIBS" \ 110 -DBORINGSSL_INCLUDE_DIR="$PWD/boringssl/include/" . 111 - name: Build ngtcp2 112 run: | 113 make 114 make check 115 - name: Integration test 116 run: | 117 ./ci/gen-certificate.sh 118 NETTLE_PATH=$PWD/nettle-3.6/build/lib64 119 for client in client gtlsclient bsslclient; do 120 for server in server gtlsserver bsslserver; do 121 echo "# $client - $server" 122 LD_LIBRARY_PATH=$NETTLE_PATH ./examples/$server localhost 4433 cert/server.key cert/server.crt & 123 LD_LIBRARY_PATH=$NETTLE_PATH ./examples/$client localhost 4433 https://localhost/ --exit-on-first-stream-close 124 killall -INT $server 125 sleep 1 126 done 127 done 128 129 build-windows: 130 runs-on: windows-latest 131 132 steps: 133 - uses: actions/checkout@v2 134 - name: Configure cmake 135 run: | 136 mkdir build 137 cd build 138 cmake .. 139 - name: Build ngtcp2 140 run: | 141 cmake --build build 142