mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	gh-99108: Build the hashlib HACL* code as a static library. (#101917)
This builds HACL* as a library in one place. A followup to #101707 which broke some WASM builds. This fixes 2/4 of them, but the enscripten toolchain in the others don't deduplicate linker arguments and error out. A follow-on PR will address those.
This commit is contained in:
		
							parent
							
								
									096d0097a0
								
							
						
					
					
						commit
						d777790bab
					
				
					 3 changed files with 34 additions and 4 deletions
				
			
		|  | @ -207,6 +207,7 @@ ENSUREPIP=      @ENSUREPIP@ | ||||||
| # Internal static libraries | # Internal static libraries | ||||||
| LIBMPDEC_A= Modules/_decimal/libmpdec/libmpdec.a | LIBMPDEC_A= Modules/_decimal/libmpdec/libmpdec.a | ||||||
| LIBEXPAT_A= Modules/expat/libexpat.a | LIBEXPAT_A= Modules/expat/libexpat.a | ||||||
|  | LIBHACL_A= Modules/_hacl/libHacl_Streaming_SHA2.a | ||||||
| 
 | 
 | ||||||
| # Module state, compiler flags and linker flags | # Module state, compiler flags and linker flags | ||||||
| # Empty CFLAGS and LDFLAGS are omitted. | # Empty CFLAGS and LDFLAGS are omitted. | ||||||
|  | @ -571,6 +572,23 @@ LIBEXPAT_HEADERS= \ | ||||||
| 		Modules/expat/xmltok.h \ | 		Modules/expat/xmltok.h \ | ||||||
| 		Modules/expat/xmltok_impl.h | 		Modules/expat/xmltok_impl.h | ||||||
| 
 | 
 | ||||||
|  | ########################################################################## | ||||||
|  | # hashlib's HACL* library | ||||||
|  | 
 | ||||||
|  | LIBHACL_OBJS= \ | ||||||
|  |                 Modules/_hacl/Hacl_Streaming_SHA2.o | ||||||
|  | 
 | ||||||
|  | LIBHACL_HEADERS= \ | ||||||
|  |                 Modules/_hacl/Hacl_Streaming_SHA2.h \ | ||||||
|  |                 Modules/_hacl/include/krml/FStar_UInt128_Verified.h \ | ||||||
|  |                 Modules/_hacl/include/krml/FStar_UInt_8_16_32_64.h \ | ||||||
|  |                 Modules/_hacl/include/krml/fstar_uint128_struct_endianness.h \ | ||||||
|  |                 Modules/_hacl/include/krml/internal/target.h \ | ||||||
|  |                 Modules/_hacl/include/krml/lowstar_endianness.h \ | ||||||
|  |                 Modules/_hacl/include/krml/types.h \ | ||||||
|  |                 Modules/_hacl/internal/Hacl_SHA2_Generic.h \ | ||||||
|  |                 Modules/_hacl/python_hacl_namespaces.h | ||||||
|  | 
 | ||||||
| ######################################################################### | ######################################################################### | ||||||
| # Rules | # Rules | ||||||
| 
 | 
 | ||||||
|  | @ -890,6 +908,17 @@ $(LIBEXPAT_A): $(LIBEXPAT_OBJS) | ||||||
| 	-rm -f $@ | 	-rm -f $@ | ||||||
| 	$(AR) $(ARFLAGS) $@ $(LIBEXPAT_OBJS) | 	$(AR) $(ARFLAGS) $@ $(LIBEXPAT_OBJS) | ||||||
| 
 | 
 | ||||||
|  | ########################################################################## | ||||||
|  | # Build HACL* static libraries for hashlib: libHacl_Streaming_SHA2.a | ||||||
|  | LIBHACL_CFLAGS=-I$(srcdir)/Modules/_hacl/include -D_BSD_SOURCE -D_DEFAULT_SOURCE $(PY_STDMODULE_CFLAGS) $(CCSHARED) | ||||||
|  | 
 | ||||||
|  | Modules/_hacl/Hacl_Streaming_SHA2.o: $(srcdir)/Modules/_hacl/Hacl_Streaming_SHA2.c $(LIBHACL_HEADERS) | ||||||
|  | 	$(CC) -c $(LIBHACL_CFLAGS) -o $@ $(srcdir)/Modules/_hacl/Hacl_Streaming_SHA2.c | ||||||
|  | 
 | ||||||
|  | $(LIBHACL_A): $(LIBHACL_OBJS) | ||||||
|  | 	-rm -f $@ | ||||||
|  | 	$(AR) $(ARFLAGS) $@ $(LIBHACL_OBJS) | ||||||
|  | 
 | ||||||
| # create relative links from build/lib.platform/egg.so to Modules/egg.so | # create relative links from build/lib.platform/egg.so to Modules/egg.so | ||||||
| # pybuilddir.txt is created too late. We cannot use it in Makefile | # pybuilddir.txt is created too late. We cannot use it in Makefile | ||||||
| # targets. ln --relative is not portable. | # targets. ln --relative is not portable. | ||||||
|  | @ -2606,9 +2635,9 @@ MODULE__HASHLIB_DEPS=$(srcdir)/Modules/hashlib.h | ||||||
| MODULE__IO_DEPS=$(srcdir)/Modules/_io/_iomodule.h | MODULE__IO_DEPS=$(srcdir)/Modules/_io/_iomodule.h | ||||||
| MODULE__MD5_DEPS=$(srcdir)/Modules/hashlib.h | MODULE__MD5_DEPS=$(srcdir)/Modules/hashlib.h | ||||||
| MODULE__SHA1_DEPS=$(srcdir)/Modules/hashlib.h | MODULE__SHA1_DEPS=$(srcdir)/Modules/hashlib.h | ||||||
| MODULE__SHA256_DEPS=$(srcdir)/Modules/hashlib.h $(srcdir)/Modules/_hacl/include/krml/FStar_UInt_8_16_32_64.h $(srcdir)/Modules/_hacl/include/krml/lowstar_endianness.h $(srcdir)/Modules/_hacl/include/krml/internal/target.h $(srcdir)/Modules/_hacl/Hacl_Streaming_SHA2.h | MODULE__SHA256_DEPS=$(srcdir)/Modules/hashlib.h $(LIBHACL_HEADERS) $(LIBHACL_A) | ||||||
| MODULE__SHA3_DEPS=$(srcdir)/Modules/_sha3/sha3.c $(srcdir)/Modules/_sha3/sha3.h $(srcdir)/Modules/hashlib.h | MODULE__SHA3_DEPS=$(srcdir)/Modules/_sha3/sha3.c $(srcdir)/Modules/_sha3/sha3.h $(srcdir)/Modules/hashlib.h | ||||||
| MODULE__SHA512_DEPS=$(srcdir)/Modules/hashlib.h $(srcdir)/Modules/_hacl/include/krml/FStar_UInt_8_16_32_64.h $(srcdir)/Modules/_hacl/include/krml/lowstar_endianness.h $(srcdir)/Modules/_hacl/include/krml/internal/target.h $(srcdir)/Modules/_hacl/Hacl_Streaming_SHA2.h | MODULE__SHA512_DEPS=$(srcdir)/Modules/hashlib.h $(LIBHACL_HEADERS) $(LIBHACL_A) | ||||||
| MODULE__SOCKET_DEPS=$(srcdir)/Modules/socketmodule.h $(srcdir)/Modules/addrinfo.h $(srcdir)/Modules/getaddrinfo.c $(srcdir)/Modules/getnameinfo.c | MODULE__SOCKET_DEPS=$(srcdir)/Modules/socketmodule.h $(srcdir)/Modules/addrinfo.h $(srcdir)/Modules/getaddrinfo.c $(srcdir)/Modules/getnameinfo.c | ||||||
| MODULE__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.h $(srcdir)/Modules/_ssl_data_111.h $(srcdir)/Modules/_ssl_data_300.h $(srcdir)/Modules/socketmodule.h | MODULE__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.h $(srcdir)/Modules/_ssl_data_111.h $(srcdir)/Modules/_ssl_data_300.h $(srcdir)/Modules/socketmodule.h | ||||||
| MODULE__TESTCAPI_DEPS=$(srcdir)/Modules/_testcapi/testcapi_long.h $(srcdir)/Modules/_testcapi/parts.h | MODULE__TESTCAPI_DEPS=$(srcdir)/Modules/_testcapi/testcapi_long.h $(srcdir)/Modules/_testcapi/parts.h | ||||||
|  |  | ||||||
|  | @ -79,8 +79,8 @@ | ||||||
| # hashing builtins, can be disabled with --without-builtin-hashlib-hashes | # hashing builtins, can be disabled with --without-builtin-hashlib-hashes | ||||||
| @MODULE__MD5_TRUE@_md5 md5module.c | @MODULE__MD5_TRUE@_md5 md5module.c | ||||||
| @MODULE__SHA1_TRUE@_sha1 sha1module.c | @MODULE__SHA1_TRUE@_sha1 sha1module.c | ||||||
| @MODULE__SHA256_TRUE@_sha256 sha256module.c _hacl/Hacl_Streaming_SHA2.c | @MODULE__SHA256_TRUE@_sha256 sha256module.c -I$(srcdir)/Modules/_hacl/include Modules/_hacl/libHacl_Streaming_SHA2.a | ||||||
| @MODULE__SHA512_TRUE@_sha512 sha512module.c _hacl/Hacl_Streaming_SHA2.c | @MODULE__SHA512_TRUE@_sha512 sha512module.c -I$(srcdir)/Modules/_hacl/include Modules/_hacl/libHacl_Streaming_SHA2.a | ||||||
| @MODULE__SHA3_TRUE@_sha3 _sha3/sha3module.c | @MODULE__SHA3_TRUE@_sha3 _sha3/sha3module.c | ||||||
| @MODULE__BLAKE2_TRUE@_blake2 _blake2/blake2module.c _blake2/blake2b_impl.c _blake2/blake2s_impl.c | @MODULE__BLAKE2_TRUE@_blake2 _blake2/blake2module.c _blake2/blake2b_impl.c _blake2/blake2s_impl.c | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,6 +25,7 @@ | ||||||
| #define Hacl_Streaming_SHA2_init_224 python_hashlib_Hacl_Streaming_SHA2_init_224 | #define Hacl_Streaming_SHA2_init_224 python_hashlib_Hacl_Streaming_SHA2_init_224 | ||||||
| #define Hacl_Streaming_SHA2_init_512 python_hashlib_Hacl_Streaming_SHA2_init_512 | #define Hacl_Streaming_SHA2_init_512 python_hashlib_Hacl_Streaming_SHA2_init_512 | ||||||
| #define Hacl_Streaming_SHA2_init_384 python_hashlib_Hacl_Streaming_SHA2_init_384 | #define Hacl_Streaming_SHA2_init_384 python_hashlib_Hacl_Streaming_SHA2_init_384 | ||||||
|  | #define Hacl_SHA2_Scalar32_sha512_init python_hashlib_Hacl_SHA2_Scalar32_sha512_init | ||||||
| #define Hacl_Streaming_SHA2_update_256 python_hashlib_Hacl_Streaming_SHA2_update_256 | #define Hacl_Streaming_SHA2_update_256 python_hashlib_Hacl_Streaming_SHA2_update_256 | ||||||
| #define Hacl_Streaming_SHA2_update_224 python_hashlib_Hacl_Streaming_SHA2_update_224 | #define Hacl_Streaming_SHA2_update_224 python_hashlib_Hacl_Streaming_SHA2_update_224 | ||||||
| #define Hacl_Streaming_SHA2_update_512 python_hashlib_Hacl_Streaming_SHA2_update_512 | #define Hacl_Streaming_SHA2_update_512 python_hashlib_Hacl_Streaming_SHA2_update_512 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Gregory P. Smith
						Gregory P. Smith