@@ -146,29 +146,224 @@ target_compile_definitions(instruments PRIVATE
146146if (INSTRUMENTS_HAS_QUIC)
147147 target_compile_definitions (instruments PRIVATE INSTRUMENTS_HAS_QUIC )
148148
149- # picoquic
150- find_path (PICOQUIC_INCLUDE_DIRS picoquic.h
151- PATHS
152- ${CMAKE_SOURCE_DIR} /../picoquic/picoquic
153- ${CMAKE_SOURCE_DIR} /../../Externals/picoquic/picoquic
154- )
155- find_library (PICOQUIC_LIBRARIES NAMES picoquic )
149+ find_package (OpenSSL REQUIRED )
156150
157- # picotls
158- find_path (PICOTLS_INCLUDE_DIRS picotls.h
159- PATHS
160- ${CMAKE_SOURCE_DIR} /../picotls/include
161- ${CMAKE_SOURCE_DIR} /../../Externals/picotls/include
162- )
163- find_library (PICOTLS_LIBRARIES NAMES picotls )
151+ # ── picotls ──────────────────────────────────────────────────────────
152+ # Pass -DPICOTLS_SOURCE_DIR=/path/to/picotls to build from source,
153+ # otherwise falls back to find_library.
154+ if (DEFINED PICOTLS_SOURCE_DIR )
155+ add_library (instruments_picotls STATIC
156+ ${PICOTLS_SOURCE_DIR} /lib/picotls.c
157+ ${PICOTLS_SOURCE_DIR} /lib/hpke.c
158+ ${PICOTLS_SOURCE_DIR} /lib/pembase64.c
159+ ${PICOTLS_SOURCE_DIR} /lib/asn1.c
160+ ${PICOTLS_SOURCE_DIR} /lib/openssl.c
161+ ${PICOTLS_SOURCE_DIR} /lib/cifra.c
162+ ${PICOTLS_SOURCE_DIR} /lib/cifra/x25519.c
163+ ${PICOTLS_SOURCE_DIR} /lib/cifra/chacha20.c
164+ ${PICOTLS_SOURCE_DIR} /lib/cifra/aes128.c
165+ ${PICOTLS_SOURCE_DIR} /lib/cifra/aes256.c
166+ ${PICOTLS_SOURCE_DIR} /lib/cifra/random.c
167+ ${PICOTLS_SOURCE_DIR} /lib/minicrypto-pem.c
168+ ${PICOTLS_SOURCE_DIR} /lib/uecc.c
169+ ${PICOTLS_SOURCE_DIR} /lib/ffx.c
170+ ${PICOTLS_SOURCE_DIR} /lib/micro-ecc.c
171+ ${PICOTLS_SOURCE_DIR} /lib/cifra-core-chacha20.c
172+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/aes.c
173+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/blockwise.c
174+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/chash.c
175+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/curve25519.c
176+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/drbg.c
177+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/hmac.c
178+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/gcm.c
179+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/gf128.c
180+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/modes.c
181+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/poly1305.c
182+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/sha256.c
183+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/sha512.c
184+ )
185+ target_include_directories (instruments_picotls
186+ PUBLIC
187+ ${PICOTLS_SOURCE_DIR} /include
188+ PRIVATE
189+ ${PICOTLS_SOURCE_DIR} /picotlsvs/picotls
190+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/ext
191+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src
192+ ${PICOTLS_SOURCE_DIR} /deps/micro-ecc
193+ ${OPENSSL_INCLUDE_DIR}
194+ )
195+ target_link_libraries (instruments_picotls PUBLIC OpenSSL::SSL OpenSSL::Crypto )
196+ if (WIN32 )
197+ target_compile_definitions (instruments_picotls PRIVATE _WINDOWS )
198+ else ()
199+ target_compile_definitions (instruments_picotls PRIVATE _GNU_SOURCE )
200+ target_compile_options (instruments_picotls PRIVATE -pthread )
201+ endif ()
202+ if (NOT MSVC )
203+ target_compile_options (instruments_picotls PRIVATE
204+ -Wno-unused-parameter -Wno-missing-field-initializers
205+ -Wno-sign-compare -Wno-cast-function-type -Wno-incompatible-pointer-types
206+ )
207+ endif ()
208+ set (PICOTLS_LIBRARIES instruments_picotls)
209+ set (PICOTLS_INCLUDE_DIRS ${PICOTLS_SOURCE_DIR} /include)
210+ else ()
211+ find_path (PICOTLS_INCLUDE_DIRS picotls.h
212+ PATHS
213+ ${CMAKE_SOURCE_DIR} /../picotls/include
214+ ${CMAKE_SOURCE_DIR} /../../Externals/picotls/include
215+ )
216+ find_library (PICOTLS_LIBRARIES NAMES picotls )
217+ endif ()
164218
165- # lwIP
166- find_path (LWIP_INCLUDE_DIRS lwip/init.h
167- PATHS
168- ${CMAKE_SOURCE_DIR} /../lwip/src/include
169- ${CMAKE_SOURCE_DIR} /../../Externals/lwip/src/include
170- )
171- find_library (LWIP_LIBRARIES NAMES lwip )
219+ # ── picoquic ─────────────────────────────────────────────────────────
220+ # Pass -DPICOQUIC_SOURCE_DIR=/path/to/picoquic to build from source.
221+ if (DEFINED PICOQUIC_SOURCE_DIR )
222+ add_library (instruments_picoquic STATIC
223+ ${PICOQUIC_SOURCE_DIR} /picoquic/bbr.c
224+ ${PICOQUIC_SOURCE_DIR} /picoquic/bbr1.c
225+ ${PICOQUIC_SOURCE_DIR} /picoquic/bytestream.c
226+ ${PICOQUIC_SOURCE_DIR} /picoquic/c4.c
227+ ${PICOQUIC_SOURCE_DIR} /picoquic/cc_common.c
228+ ${PICOQUIC_SOURCE_DIR} /picoquic/config.c
229+ ${PICOQUIC_SOURCE_DIR} /picoquic/cubic.c
230+ ${PICOQUIC_SOURCE_DIR} /picoquic/ech.c
231+ ${PICOQUIC_SOURCE_DIR} /picoquic/error_names.c
232+ ${PICOQUIC_SOURCE_DIR} /picoquic/fastcc.c
233+ ${PICOQUIC_SOURCE_DIR} /picoquic/frames.c
234+ ${PICOQUIC_SOURCE_DIR} /picoquic/intformat.c
235+ ${PICOQUIC_SOURCE_DIR} /picoquic/logger.c
236+ ${PICOQUIC_SOURCE_DIR} /picoquic/logwriter.c
237+ ${PICOQUIC_SOURCE_DIR} /picoquic/loss_recovery.c
238+ ${PICOQUIC_SOURCE_DIR} /picoquic/newreno.c
239+ ${PICOQUIC_SOURCE_DIR} /picoquic/pacing.c
240+ ${PICOQUIC_SOURCE_DIR} /picoquic/packet.c
241+ ${PICOQUIC_SOURCE_DIR} /picoquic/paths.c
242+ ${PICOQUIC_SOURCE_DIR} /picoquic/performance_log.c
243+ ${PICOQUIC_SOURCE_DIR} /picoquic/picohash.c
244+ ${PICOQUIC_SOURCE_DIR} /picoquic/picoquic_lb.c
245+ ${PICOQUIC_SOURCE_DIR} /picoquic/picoquic_ptls_openssl.c
246+ ${PICOQUIC_SOURCE_DIR} /picoquic/picoquic_ptls_minicrypto.c
247+ ${PICOQUIC_SOURCE_DIR} /picoquic/picosplay.c
248+ ${PICOQUIC_SOURCE_DIR} /picoquic/port_blocking.c
249+ ${PICOQUIC_SOURCE_DIR} /picoquic/prague.c
250+ ${PICOQUIC_SOURCE_DIR} /picoquic/quicctx.c
251+ ${PICOQUIC_SOURCE_DIR} /picoquic/register_all_cc_algorithms.c
252+ ${PICOQUIC_SOURCE_DIR} /picoquic/sacks.c
253+ ${PICOQUIC_SOURCE_DIR} /picoquic/sender.c
254+ ${PICOQUIC_SOURCE_DIR} /picoquic/sim_link.c
255+ ${PICOQUIC_SOURCE_DIR} /picoquic/siphash.c
256+ ${PICOQUIC_SOURCE_DIR} /picoquic/spinbit.c
257+ ${PICOQUIC_SOURCE_DIR} /picoquic/ticket_store.c
258+ ${PICOQUIC_SOURCE_DIR} /picoquic/timing.c
259+ ${PICOQUIC_SOURCE_DIR} /picoquic/token_store.c
260+ ${PICOQUIC_SOURCE_DIR} /picoquic/tls_api.c
261+ ${PICOQUIC_SOURCE_DIR} /picoquic/transport.c
262+ ${PICOQUIC_SOURCE_DIR} /picoquic/unified_log.c
263+ ${PICOQUIC_SOURCE_DIR} /picoquic/util.c
264+ )
265+ target_include_directories (instruments_picoquic
266+ PUBLIC ${PICOQUIC_SOURCE_DIR} /picoquic
267+ PRIVATE
268+ ${PICOTLS_INCLUDE_DIRS}
269+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src
270+ ${PICOTLS_SOURCE_DIR} /deps/cifra/src/ext
271+ ${PICOTLS_SOURCE_DIR} /deps/micro-ecc
272+ ${OPENSSL_INCLUDE_DIR}
273+ )
274+ target_compile_definitions (instruments_picoquic PRIVATE
275+ PTLS_WITHOUT_FUSION
276+ DISABLE_DEBUG_PRINTF
277+ )
278+ if (WIN32 )
279+ target_compile_definitions (instruments_picoquic PRIVATE _WINDOWS _WIN32_WINNT=0x0A00 )
280+ else ()
281+ target_compile_definitions (instruments_picoquic PRIVATE _GNU_SOURCE )
282+ endif ()
283+ if (NOT MSVC )
284+ target_compile_options (instruments_picoquic PRIVATE
285+ -Wno-unused-parameter -Wno-missing-field-initializers
286+ -Wno-sign-compare -Wno-extra -Wno-type-limits -Wno-unknown-pragmas
287+ )
288+ endif ()
289+ target_link_libraries (instruments_picoquic PUBLIC ${PICOTLS_LIBRARIES} )
290+ set (PICOQUIC_LIBRARIES instruments_picoquic)
291+ set (PICOQUIC_INCLUDE_DIRS ${PICOQUIC_SOURCE_DIR} /picoquic)
292+ else ()
293+ find_path (PICOQUIC_INCLUDE_DIRS picoquic.h
294+ PATHS
295+ ${CMAKE_SOURCE_DIR} /../picoquic/picoquic
296+ ${CMAKE_SOURCE_DIR} /../../Externals/picoquic/picoquic
297+ )
298+ find_library (PICOQUIC_LIBRARIES NAMES picoquic )
299+ endif ()
300+
301+ # ── lwIP ─────────────────────────────────────────────────────────────
302+ # Pass -DLWIP_SOURCE_DIR=/path/to/lwip to build from source.
303+ if (DEFINED LWIP_SOURCE_DIR )
304+ add_library (instruments_lwip STATIC
305+ ${LWIP_SOURCE_DIR} /src/core/init.c
306+ ${LWIP_SOURCE_DIR} /src/core/def.c
307+ ${LWIP_SOURCE_DIR} /src/core/dns.c
308+ ${LWIP_SOURCE_DIR} /src/core/inet_chksum.c
309+ ${LWIP_SOURCE_DIR} /src/core/ip.c
310+ ${LWIP_SOURCE_DIR} /src/core/mem.c
311+ ${LWIP_SOURCE_DIR} /src/core/memp.c
312+ ${LWIP_SOURCE_DIR} /src/core/netif.c
313+ ${LWIP_SOURCE_DIR} /src/core/pbuf.c
314+ ${LWIP_SOURCE_DIR} /src/core/raw.c
315+ ${LWIP_SOURCE_DIR} /src/core/stats.c
316+ ${LWIP_SOURCE_DIR} /src/core/sys.c
317+ ${LWIP_SOURCE_DIR} /src/core/altcp.c
318+ ${LWIP_SOURCE_DIR} /src/core/altcp_alloc.c
319+ ${LWIP_SOURCE_DIR} /src/core/altcp_tcp.c
320+ ${LWIP_SOURCE_DIR} /src/core/tcp.c
321+ ${LWIP_SOURCE_DIR} /src/core/tcp_in.c
322+ ${LWIP_SOURCE_DIR} /src/core/tcp_out.c
323+ ${LWIP_SOURCE_DIR} /src/core/timeouts.c
324+ ${LWIP_SOURCE_DIR} /src/core/udp.c
325+ ${LWIP_SOURCE_DIR} /src/core/ipv4/acd.c
326+ ${LWIP_SOURCE_DIR} /src/core/ipv4/autoip.c
327+ ${LWIP_SOURCE_DIR} /src/core/ipv4/dhcp.c
328+ ${LWIP_SOURCE_DIR} /src/core/ipv4/etharp.c
329+ ${LWIP_SOURCE_DIR} /src/core/ipv4/icmp.c
330+ ${LWIP_SOURCE_DIR} /src/core/ipv4/igmp.c
331+ ${LWIP_SOURCE_DIR} /src/core/ipv4/ip4.c
332+ ${LWIP_SOURCE_DIR} /src/core/ipv4/ip4_addr.c
333+ ${LWIP_SOURCE_DIR} /src/core/ipv4/ip4_frag.c
334+ ${LWIP_SOURCE_DIR} /src/core/ipv6/dhcp6.c
335+ ${LWIP_SOURCE_DIR} /src/core/ipv6/ethip6.c
336+ ${LWIP_SOURCE_DIR} /src/core/ipv6/icmp6.c
337+ ${LWIP_SOURCE_DIR} /src/core/ipv6/inet6.c
338+ ${LWIP_SOURCE_DIR} /src/core/ipv6/ip6.c
339+ ${LWIP_SOURCE_DIR} /src/core/ipv6/ip6_addr.c
340+ ${LWIP_SOURCE_DIR} /src/core/ipv6/ip6_frag.c
341+ ${LWIP_SOURCE_DIR} /src/core/ipv6/mld6.c
342+ ${LWIP_SOURCE_DIR} /src/core/ipv6/nd6.c
343+ ${LWIP_SOURCE_DIR} /src/api/err.c
344+ ${LWIP_SOURCE_DIR} /src/netif/ethernet.c
345+ ${CMAKE_CURRENT_SOURCE_DIR} /src/connection/sys_arch.c
346+ )
347+ target_include_directories (instruments_lwip
348+ PUBLIC ${LWIP_SOURCE_DIR} /src/include
349+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} /src/connection
350+ )
351+ if (NOT MSVC )
352+ target_compile_options (instruments_lwip PRIVATE
353+ -Wno-unused-parameter -Wno-missing-field-initializers
354+ -Wno-sign-compare -Wno-address -Wno-extra
355+ )
356+ endif ()
357+ set (LWIP_LIBRARIES instruments_lwip)
358+ set (LWIP_INCLUDE_DIRS ${LWIP_SOURCE_DIR} /src/include)
359+ else ()
360+ find_path (LWIP_INCLUDE_DIRS lwip/init.h
361+ PATHS
362+ ${CMAKE_SOURCE_DIR} /../lwip/src/include
363+ ${CMAKE_SOURCE_DIR} /../../Externals/lwip/src/include
364+ )
365+ find_library (LWIP_LIBRARIES NAMES lwip )
366+ endif ()
172367
173368 target_include_directories (instruments PRIVATE
174369 ${PICOQUIC_INCLUDE_DIRS}
@@ -179,6 +374,8 @@ if(INSTRUMENTS_HAS_QUIC)
179374 ${PICOQUIC_LIBRARIES}
180375 ${PICOTLS_LIBRARIES}
181376 ${LWIP_LIBRARIES}
377+ OpenSSL::SSL
378+ OpenSSL::Crypto
182379 )
183380endif ()
184381
0 commit comments