@@ -230,10 +230,9 @@ LIBEXPAT_A= Modules/expat/libexpat.a
230230
231231# HACL* build configuration
232232LIBHACL_CFLAGS=@LIBHACL_CFLAGS@
233- LIBHACL_SIMD128_FLAGS=@LIBHACL_SIMD128_FLAGS@
234- LIBHACL_SIMD256_FLAGS=@LIBHACL_SIMD256_FLAGS@
235- LIBHACL_SIMD128_OBJS=@LIBHACL_SIMD128_OBJS@
236- LIBHACL_SIMD256_OBJS=@LIBHACL_SIMD256_OBJS@
233+ LIBHACL_LDFLAGS=@LIBHACL_LDFLAGS@
234+ LIBHACL_BLAKE2_SIMD128_CFLAGS=@LIBHACL_SIMD128_FLAGS@ -DHACL_CAN_COMPILE_VEC128
235+ LIBHACL_BLAKE2_SIMD256_CFLAGS=@LIBHACL_SIMD256_FLAGS@ -DHACL_CAN_COMPILE_VEC256
237236
238237# Module state, compiler flags and linker flags
239238# Empty CFLAGS and LDFLAGS are omitted.
@@ -656,25 +655,40 @@ LIBEXPAT_HEADERS= \
656655
657656##########################################################################
658657# hashlib's HACL* library
658+ #
659+ # On WASI, static build is required.
660+ # On other platforms, a shared library is used.
659661
660662LIBHACL_MD5_OBJS= \
661663		Modules/_hacl/Hacl_Hash_MD5.o
664+ LIBHACL_MD5_LIB_STATIC=Modules/_hacl/libHacl_Hash_MD5.a
665+ LIBHACL_MD5_LIB_SHARED=Modules/_hacl/libHacl_Hash_MD5$(SHLIB_SUFFIX)
662666
663667LIBHACL_SHA1_OBJS= \
664668		Modules/_hacl/Hacl_Hash_SHA1.o
669+ LIBHACL_SHA1_LIB_STATIC=Modules/_hacl/libHacl_Hash_SHA1.a
670+ LIBHACL_SHA1_LIB_SHARED=Modules/_hacl/libHacl_Hash_SHA1$(SHLIB_SUFFIX)
665671
666672LIBHACL_SHA2_OBJS= \
667673		Modules/_hacl/Hacl_Hash_SHA2.o
674+ LIBHACL_SHA2_LIB_STATIC=Modules/_hacl/libHacl_Hash_SHA2.a
675+ LIBHACL_SHA2_LIB_SHARED=Modules/_hacl/libHacl_Hash_SHA2$(SHLIB_SUFFIX)
668676
669677LIBHACL_SHA3_OBJS= \
670678		Modules/_hacl/Hacl_Hash_SHA3.o
679+ LIBHACL_SHA3_LIB_STATIC=Modules/_hacl/libHacl_Hash_SHA3.a
680+ LIBHACL_SHA3_LIB_SHARED=Modules/_hacl/libHacl_Hash_SHA3$(SHLIB_SUFFIX)
671681
682+ LIBHACL_BLAKE2_SIMD128_OBJS=@LIBHACL_BLAKE2_SIMD128_OBJS@
683+ LIBHACL_BLAKE2_SIMD256_OBJS=@LIBHACL_BLAKE2_SIMD256_OBJS@
672684LIBHACL_BLAKE2_OBJS= \
673685		Modules/_hacl/Hacl_Hash_Blake2s.o \
674686		Modules/_hacl/Hacl_Hash_Blake2b.o \
675687		Modules/_hacl/Lib_Memzero0.o \
676- 		$(LIBHACL_SIMD128_OBJS) \
677- 		$(LIBHACL_SIMD256_OBJS)
688+ 		$(LIBHACL_BLAKE2_SIMD128_OBJS) \
689+ 		$(LIBHACL_BLAKE2_SIMD256_OBJS)
690+ LIBHACL_BLAKE2_LIB_STATIC=Modules/_hacl/libHacl_Hash_BLAKE2.a
691+ LIBHACL_BLAKE2_LIB_SHARED=Modules/_hacl/libHacl_Hash_BLAKE2$(SHLIB_SUFFIX)
678692
679693LIBHACL_HMAC_OBJS= \
680694		Modules/_hacl/Hacl_HMAC.o \
@@ -684,6 +698,8 @@ LIBHACL_HMAC_OBJS= \
684698		$(LIBHACL_SHA2_OBJS) \
685699		$(LIBHACL_SHA3_OBJS) \
686700		$(LIBHACL_BLAKE2_OBJS)
701+ LIBHACL_HMAC_LIB_STATIC=Modules/_hacl/libHacl_HMAC.a
702+ LIBHACL_HMAC_LIB_SHARED=Modules/_hacl/libHacl_HMAC$(SHLIB_SUFFIX)
687703
688704LIBHACL_HEADERS= \
689705		Modules/_hacl/include/krml/FStar_UInt128_Verified.h \
@@ -1456,57 +1472,91 @@ $(LIBEXPAT_A): $(LIBEXPAT_OBJS)
14561472	$(AR) $(ARFLAGS) $@ $(LIBEXPAT_OBJS)
14571473
14581474##########################################################################
1459- # Build  HACL* static libraries for hashlib and HACL* HMAC. 
1475+ # HACL* library build 
14601476#
14611477# The HACL* modules are dynamically compiled and linked with the
14621478# corresponding CPython built-in modules on demand, depending on
14631479# whether the module is built or not.
14641480#
14651481# In particular, the HACL* objects are also dependencies of the
1466- # corresponding C extension modules and are indicated by defining
1467- # the MODULE_<NAME>_LIBDEPS variable.
1482+ # corresponding C extension modules but makesetup must NOT create
1483+ # a rule for them.
1484+ #
1485+ # For WASI, static linking is needed and HACL* is statically linked instead.
14681486
14691487Modules/_hacl/Lib_Memzero0.o: $(srcdir)/Modules/_hacl/Lib_Memzero0.c $(LIBHACL_HEADERS)
14701488	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Lib_Memzero0.c
14711489
1472- MODULE__MD5_LIBDEPS=$(LIBHACL_MD5_OBJS)
14731490Modules/_hacl/Hacl_Hash_MD5.o: $(srcdir)/Modules/_hacl/Hacl_Hash_MD5.c $(LIBHACL_MD5_HEADERS)
14741491	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_MD5.c
1492+ $(LIBHACL_MD5_LIB_STATIC): $(LIBHACL_MD5_OBJS)
1493+ 	-rm -f $@
1494+ 	$(AR) $(ARFLAGS) $@ $(LIBHACL_MD5_OBJS)
1495+ $(LIBHACL_MD5_LIB_SHARED): $(LIBHACL_MD5_OBJS)
1496+ 	-rm -f $@
1497+ 	$(LDSHARED) $(LIBHACL_LDFLAGS) $(LIBHACL_MD5_OBJS) -o $@
14751498
1476- MODULE__SHA1_LIBDEPS=$(LIBHACL_SHA1_OBJS)
14771499Modules/_hacl/Hacl_Hash_SHA1.o: $(srcdir)/Modules/_hacl/Hacl_Hash_SHA1.c $(LIBHACL_SHA1_HEADERS)
14781500	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_SHA1.c
1501+ $(LIBHACL_SHA1_LIB_STATIC): $(LIBHACL_SHA1_OBJS)
1502+ 	-rm -f $@
1503+ 	$(AR) $(ARFLAGS) $@ $(LIBHACL_SHA1_OBJS)
1504+ $(LIBHACL_SHA1_LIB_SHARED): $(LIBHACL_SHA1_OBJS)
1505+ 	-rm -f $@
1506+ 	$(LDSHARED) $(LIBHACL_LDFLAGS) $(LIBHACL_SHA1_OBJS) -o $@
14791507
1480- MODULE__SHA2_LIBDEPS=$(LIBHACL_SHA2_OBJS)
14811508Modules/_hacl/Hacl_Hash_SHA2.o: $(srcdir)/Modules/_hacl/Hacl_Hash_SHA2.c $(LIBHACL_SHA2_HEADERS)
14821509	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_SHA2.c
1510+ $(LIBHACL_SHA2_LIB_STATIC): $(LIBHACL_SHA2_OBJS)
1511+ 	-rm -f $@
1512+ 	$(AR) $(ARFLAGS) $@ $(LIBHACL_SHA2_OBJS)
1513+ $(LIBHACL_SHA2_LIB_SHARED): $(LIBHACL_SHA2_OBJS)
1514+ 	-rm -f $@
1515+ 	$(LDSHARED) $(LIBHACL_LDFLAGS) $(LIBHACL_SHA2_OBJS) -o $@
14831516
1484- MODULE__SHA3_LIBDEPS=$(LIBHACL_SHA3_OBJS)
14851517Modules/_hacl/Hacl_Hash_SHA3.o: $(srcdir)/Modules/_hacl/Hacl_Hash_SHA3.c $(LIBHACL_SHA3_HEADERS)
14861518	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_SHA3.c
1519+ $(LIBHACL_SHA3_LIB_STATIC): $(LIBHACL_SHA3_OBJS)
1520+ 	-rm -f $@
1521+ 	$(AR) $(ARFLAGS) $@ $(LIBHACL_SHA3_OBJS)
1522+ $(LIBHACL_SHA3_LIB_SHARED): $(LIBHACL_SHA3_OBJS)
1523+ 	-rm -f $@
1524+ 	$(LDSHARED) $(LIBHACL_LDFLAGS) $(LIBHACL_SHA3_OBJS) -o $@
14871525
1488- MODULE__BLAKE2_LIBDEPS=$(LIBHACL_BLAKE2_OBJS)
14891526Modules/_hacl/Hacl_Hash_Blake2s.o: $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2s.c $(LIBHACL_BLAKE2_HEADERS)
14901527	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2s.c
14911528Modules/_hacl/Hacl_Hash_Blake2b.o: $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2b.c $(LIBHACL_BLAKE2_HEADERS)
14921529	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2b.c
14931530Modules/_hacl/Hacl_Hash_Blake2s_Simd128.o: $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2s_Simd128.c $(LIBHACL_BLAKE2_HEADERS)
1494- 	$(CC) -c $(LIBHACL_CFLAGS) $(LIBHACL_SIMD128_FLAGS) -DHACL_CAN_COMPILE_VEC128  -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2s_Simd128.c
1531+ 	$(CC) -c $(LIBHACL_CFLAGS) $(LIBHACL_BLAKE2_SIMD128_CFLAGS)  -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2s_Simd128.c
14951532Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.o: $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.c $(LIBHACL_BLAKE2_HEADERS)
1496- 	$(CC) -c $(LIBHACL_CFLAGS) $(LIBHACL_SIMD128_FLAGS) -DHACL_CAN_COMPILE_VEC128  -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.c
1533+ 	$(CC) -c $(LIBHACL_CFLAGS) $(LIBHACL_BLAKE2_SIMD128_CFLAGS)  -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2s_Simd128_universal2.c
14971534Modules/_hacl/Hacl_Hash_Blake2b_Simd256.o: $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2b_Simd256.c $(LIBHACL_BLAKE2_HEADERS)
1498- 	$(CC) -c $(LIBHACL_CFLAGS) $(LIBHACL_SIMD256_FLAGS) -DHACL_CAN_COMPILE_VEC256  -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2b_Simd256.c
1535+ 	$(CC) -c $(LIBHACL_CFLAGS) $(LIBHACL_BLAKE2_SIMD256_CFLAGS)  -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2b_Simd256.c
14991536Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.o: $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.c $(LIBHACL_BLAKE2_HEADERS)
1500- 	$(CC) -c $(LIBHACL_CFLAGS) $(LIBHACL_SIMD256_FLAGS) -DHACL_CAN_COMPILE_VEC256  -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.c
1537+ 	$(CC) -c $(LIBHACL_CFLAGS) $(LIBHACL_BLAKE2_SIMD256_CFLAGS)  -o $@ $(srcdir)/Modules/_hacl/Hacl_Hash_Blake2b_Simd256_universal2.c
15011538
1502- # Other cryptographic primitives
1539+ $(LIBHACL_BLAKE2_LIB_STATIC): $(LIBHACL_BLAKE2_OBJS)
1540+ 	-rm -f $@
1541+ 	$(AR) $(ARFLAGS) $@ $(LIBHACL_BLAKE2_OBJS)
1542+ $(LIBHACL_BLAKE2_LIB_SHARED): $(LIBHACL_BLAKE2_OBJS)
1543+ 	-rm -f $@
1544+ 	$(LDSHARED) $(LIBHACL_LDFLAGS) $(LIBHACL_BLAKE2_OBJS) -o $@
1545+ 
1546+ # Other HACL* cryptographic primitives
15031547
1504- MODULE__HMAC_LIBDEPS=$(LIBHACL_HMAC_OBJS)
15051548Modules/_hacl/Hacl_HMAC.o: $(srcdir)/Modules/_hacl/Hacl_HMAC.c $(LIBHACL_HMAC_HEADERS)
15061549	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_HMAC.c
15071550Modules/_hacl/Hacl_Streaming_HMAC.o: $(srcdir)/Modules/_hacl/Hacl_Streaming_HMAC.c $(LIBHACL_HMAC_HEADERS)
15081551	$(CC) -Wno-unused-variable -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_Streaming_HMAC.c
1552+ $(LIBHACL_HMAC_LIB_STATIC): $(LIBHACL_HMAC_OBJS)
1553+ 	-rm -f $@
1554+ 	$(AR) $(ARFLAGS) $@ $(LIBHACL_HMAC_OBJS)
1555+ $(LIBHACL_HMAC_LIB_SHARED): $(LIBHACL_HMAC_OBJS)
1556+ 	-rm -f $@
1557+ 	$(LDSHARED) $(LIBHACL_LDFLAGS) $(LIBHACL_HMAC_OBJS) -o $@
15091558
1559+ ##########################################################################
15101560# create relative links from build/lib.platform/egg.so to Modules/egg.so
15111561# pybuilddir.txt is created too late. We cannot use it in Makefile
15121562# targets. ln --relative is not portable.
@@ -3280,12 +3330,21 @@ MODULE__DECIMAL_DEPS=$(srcdir)/Modules/_decimal/docstrings.h @LIBMPDEC_INTERNAL@
32803330MODULE__ELEMENTTREE_DEPS=$(srcdir)/Modules/pyexpat.c @LIBEXPAT_INTERNAL@
32813331MODULE__HASHLIB_DEPS=$(srcdir)/Modules/hashlib.h
32823332MODULE__IO_DEPS=$(srcdir)/Modules/_io/_iomodule.h
3333+ 
3334+ # HACL*-based cryptographic primitives
32833335MODULE__MD5_DEPS=$(srcdir)/Modules/hashlib.h $(LIBHACL_MD5_HEADERS)
3336+ MODULE__MD5_LDEPS=$(LIBHACL_MD5_LIB_@LIBHACL_LDEPS_LIBTYPE@)
32843337MODULE__SHA1_DEPS=$(srcdir)/Modules/hashlib.h $(LIBHACL_SHA1_HEADERS)
3338+ MODULE__SHA1_LDEPS=$(LIBHACL_SHA1_LIB_@LIBHACL_LDEPS_LIBTYPE@)
32853339MODULE__SHA2_DEPS=$(srcdir)/Modules/hashlib.h $(LIBHACL_SHA2_HEADERS)
3340+ MODULE__SHA2_LDEPS=$(LIBHACL_SHA2_LIB_@LIBHACL_LDEPS_LIBTYPE@)
32863341MODULE__SHA3_DEPS=$(srcdir)/Modules/hashlib.h $(LIBHACL_SHA3_HEADERS)
3342+ MODULE__SHA3_LDEPS=$(LIBHACL_SHA3_LIB_@LIBHACL_LDEPS_LIBTYPE@)
32873343MODULE__BLAKE2_DEPS=$(srcdir)/Modules/hashlib.h $(LIBHACL_BLAKE2_HEADERS)
3344+ MODULE__BLAKE2_LDEPS=$(LIBHACL_BLAKE2_LIB_@LIBHACL_LDEPS_LIBTYPE@)
32883345MODULE__HMAC_DEPS=$(srcdir)/Modules/hashlib.h $(LIBHACL_HMAC_HEADERS)
3346+ MODULE__HMAC_LDEPS=$(LIBHACL_HMAC_LIB_@LIBHACL_LDEPS_LIBTYPE@)
3347+ 
32893348MODULE__SOCKET_DEPS=$(srcdir)/Modules/socketmodule.h $(srcdir)/Modules/addrinfo.h $(srcdir)/Modules/getaddrinfo.c $(srcdir)/Modules/getnameinfo.c
32903349MODULE__SSL_DEPS=$(srcdir)/Modules/_ssl.h $(srcdir)/Modules/_ssl/cert.c $(srcdir)/Modules/_ssl/debughelpers.c $(srcdir)/Modules/_ssl/misc.c $(srcdir)/Modules/_ssl_data_111.h $(srcdir)/Modules/_ssl_data_300.h $(srcdir)/Modules/socketmodule.h
32913350MODULE__TESTCAPI_DEPS=$(srcdir)/Modules/_testcapi/parts.h $(srcdir)/Modules/_testcapi/util.h
0 commit comments