blob: 5e56838422866d767822a59279e55b9ac1688267 [file] [log] [blame]
Tim Duesterhus288c0772020-07-28 23:00:35 +02001# Copyright 2019 Ilya Shipitsin <chipitsine@gmail.com>
2# Copyright 2020 Tim Duesterhus <tim@bastelstu.be>
3#
4# This program is free software; you can redistribute it and/or
5# modify it under the terms of the GNU General Public License
6# as published by the Free Software Foundation; either version
7# 2 of the License, or (at your option) any later version.
8
9import json
Tim Duesterhus8d173e12020-11-20 00:16:00 +010010import sys
Ilya Shipitsinbfdc6842022-05-13 21:59:38 +050011import urllib.request
12import re
Tim Duesterhus8d173e12020-11-20 00:16:00 +010013
14if len(sys.argv) == 2:
15 build_type = sys.argv[1]
16else:
17 print("Usage: {} <build_type>".format(sys.argv[0]), file=sys.stderr)
18 sys.exit(1)
19
20print("Generating matrix for type '{}'.".format(build_type))
Tim Duesterhus288c0772020-07-28 23:00:35 +020021
22
23def clean_os(os):
24 if os == "ubuntu-latest":
25 return "Ubuntu"
26 elif os == "macos-latest":
27 return "macOS"
28 return os.replace("-latest", "")
29
30
31def clean_ssl(ssl):
32 return ssl.replace("_VERSION", "").lower()
33
Ilya Shipitsinbfdc6842022-05-13 21:59:38 +050034def determine_latest_libressl(ssl):
35 libressl_download_list = urllib.request.urlopen("http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/")
36 for line in libressl_download_list.readlines():
37 decoded_line = line.decode("utf-8")
38 if "libressl-" in decoded_line and ".tar.gz.asc" in decoded_line:
39 l = re.split("libressl-|.tar.gz.asc", decoded_line)[1]
40 return "LIBRESSL={}".format(l)
Tim Duesterhus288c0772020-07-28 23:00:35 +020041
42def clean_compression(compression):
43 return compression.replace("USE_", "").lower()
44
45
46def get_asan_flags(cc):
47 if cc == "clang":
48 return [
49 "USE_OBSOLETE_LINKER=1",
50 'DEBUG_CFLAGS="-g -fsanitize=address"',
51 'LDFLAGS="-fsanitize=address"',
52 'CPU_CFLAGS.generic="-O1"',
53 ]
54
55 raise ValueError("ASAN is only supported for clang")
56
57
58matrix = []
59
60# Ubuntu
61
62os = "ubuntu-latest"
63TARGET = "linux-glibc"
64for CC in ["gcc", "clang"]:
65 matrix.append(
66 {
67 "name": "{}, {}, no features".format(clean_os(os), CC),
68 "os": os,
69 "TARGET": TARGET,
70 "CC": CC,
71 "FLAGS": [],
72 }
73 )
74
75 matrix.append(
76 {
77 "name": "{}, {}, all features".format(clean_os(os), CC),
78 "os": os,
79 "TARGET": TARGET,
80 "CC": CC,
81 "FLAGS": [
82 "USE_ZLIB=1",
Ilya Shipitsin73c3ed92021-05-18 09:46:43 +000083 "USE_OT=1",
Ilya Shipitsinef86b472022-01-13 11:36:28 +050084 "OT_INC=${HOME}/opt-ot/include",
85 "OT_LIB=${HOME}/opt-ot/lib",
Ilya Shipitsin73c3ed92021-05-18 09:46:43 +000086 "OT_RUNPATH=1",
Tim Duesterhus288c0772020-07-28 23:00:35 +020087 "USE_PCRE=1",
88 "USE_PCRE_JIT=1",
89 "USE_LUA=1",
90 "USE_OPENSSL=1",
91 "USE_SYSTEMD=1",
92 "USE_WURFL=1",
Willy Tarreau57610c62021-04-02 16:39:44 +020093 "WURFL_INC=addons/wurfl/dummy",
94 "WURFL_LIB=addons/wurfl/dummy",
Tim Duesterhus288c0772020-07-28 23:00:35 +020095 "USE_DEVICEATLAS=1",
Willy Tarreauf8d9ec52021-04-02 16:19:39 +020096 "DEVICEATLAS_SRC=addons/deviceatlas/dummy",
Willy Tarreau3dfadc72021-04-02 15:35:19 +020097 "USE_PROMEX=1",
Ilya Shipitsinb34aee82020-11-26 20:59:42 +050098 "USE_51DEGREES=1",
Willy Tarreau977209d2021-04-02 16:12:32 +020099 "51DEGREES_SRC=addons/51degrees/dummy/pattern",
Tim Duesterhus288c0772020-07-28 23:00:35 +0200100 ],
101 }
102 )
103
104 for compression in ["USE_SLZ=1", "USE_ZLIB=1"]:
105 matrix.append(
106 {
107 "name": "{}, {}, gz={}".format(
108 clean_os(os), CC, clean_compression(compression)
109 ),
110 "os": os,
111 "TARGET": TARGET,
112 "CC": CC,
113 "FLAGS": [compression],
114 }
115 )
116
117 for ssl in [
118 "stock",
119 "OPENSSL_VERSION=1.0.2u",
Ilya Shipitsinb5025612022-03-27 10:51:51 +0500120 "OPENSSL_VERSION=3.0.2",
Ilya Shipitsinbfdc6842022-05-13 21:59:38 +0500121 "LIBRESSL_VERSION=latest",
Willy Tarreau61cda6d2021-09-02 17:32:43 +0200122# "BORINGSSL=yes",
Tim Duesterhus288c0772020-07-28 23:00:35 +0200123 ]:
124 flags = ["USE_OPENSSL=1"]
Ilya Shipitsin714f28c2021-05-09 21:27:28 +0500125 if ssl == "BORINGSSL=yes":
126 flags.append("USE_QUIC=1")
Ilya Shipitsin9c872552021-12-25 14:01:52 +0500127 if "OPENSSL_VERSION=3.0." in ssl:
William Lallemandd8580d92021-06-07 15:27:57 +0200128 flags.append('DEBUG_CFLAGS="-g -Wno-deprecated-declarations"')
Tim Duesterhus288c0772020-07-28 23:00:35 +0200129 if ssl != "stock":
130 flags.append("SSL_LIB=${HOME}/opt/lib")
131 flags.append("SSL_INC=${HOME}/opt/include")
Ilya Shipitsinbfdc6842022-05-13 21:59:38 +0500132 if "LIBRESSL" in ssl and "latest" in ssl:
133 ssl = determine_latest_libressl(ssl)
Tim Duesterhus288c0772020-07-28 23:00:35 +0200134 matrix.append(
135 {
136 "name": "{}, {}, ssl={}".format(clean_os(os), CC, clean_ssl(ssl)),
137 "os": os,
138 "TARGET": TARGET,
139 "CC": CC,
140 "ssl": ssl,
141 "FLAGS": flags,
142 }
143 )
144
145# ASAN
146
147os = "ubuntu-latest"
148CC = "clang"
149TARGET = "linux-glibc"
150matrix.append(
151 {
152 "name": "{}, {}, ASAN, all features".format(clean_os(os), CC),
153 "os": os,
154 "TARGET": TARGET,
155 "CC": CC,
156 "FLAGS": get_asan_flags(CC)
157 + [
158 "USE_ZLIB=1",
Ilya Shipitsin73c3ed92021-05-18 09:46:43 +0000159 "USE_OT=1",
Ilya Shipitsinef86b472022-01-13 11:36:28 +0500160 "OT_INC=${HOME}/opt-ot/include",
161 "OT_LIB=${HOME}/opt-ot/lib",
Ilya Shipitsin73c3ed92021-05-18 09:46:43 +0000162 "OT_RUNPATH=1",
Tim Duesterhus288c0772020-07-28 23:00:35 +0200163 "USE_PCRE=1",
164 "USE_PCRE_JIT=1",
165 "USE_LUA=1",
166 "USE_OPENSSL=1",
167 "USE_SYSTEMD=1",
168 "USE_WURFL=1",
Willy Tarreau57610c62021-04-02 16:39:44 +0200169 "WURFL_INC=addons/wurfl/dummy",
170 "WURFL_LIB=addons/wurfl/dummy",
Tim Duesterhus288c0772020-07-28 23:00:35 +0200171 "USE_DEVICEATLAS=1",
Willy Tarreauf8d9ec52021-04-02 16:19:39 +0200172 "DEVICEATLAS_SRC=addons/deviceatlas/dummy",
Willy Tarreau3dfadc72021-04-02 15:35:19 +0200173 "USE_PROMEX=1",
Ilya Shipitsinb34aee82020-11-26 20:59:42 +0500174 "USE_51DEGREES=1",
Willy Tarreau977209d2021-04-02 16:12:32 +0200175 "51DEGREES_SRC=addons/51degrees/dummy/pattern",
Tim Duesterhus288c0772020-07-28 23:00:35 +0200176 ],
177 }
178)
179
180# macOS
181
182os = "macos-latest"
183TARGET = "osx"
184for CC in ["clang"]:
185 matrix.append(
186 {
187 "name": "{}, {}, no features".format(clean_os(os), CC),
188 "os": os,
189 "TARGET": TARGET,
190 "CC": CC,
191 "FLAGS": [],
192 }
193 )
194
195# Print matrix
196
197print(json.dumps(matrix, indent=4, sort_keys=True))
198
199print("::set-output name=matrix::{}".format(json.dumps({"include": matrix})))