Skip to content

Commit fadf0c1

Browse files
authored
fix(windows): resolve P256 ADX assembly linking error on MinGW (#139)
1 parent e46a993 commit fadf0c1

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

btls-sys/build/main.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,9 @@ fn ensure_patches_applied(config: &Config) -> io::Result<()> {
477477
println!("cargo:warning=applying loongarch patch to boringssl");
478478
apply_patch(config, "boringssl-loongarch.patch")?;
479479

480+
println!("cargo:warning=applying windows cross compile patch to boringssl");
481+
apply_patch(config, "boringssl-windows.patch")?;
482+
480483
if config.features.underscore_wildcards {
481484
println!("cargo:warning=applying underscore wildcards patch to boringssl");
482485
apply_patch(config, "underscore-wildcards.patch")?;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
--- a/third_party/fiat/p256_64.h
2+
+++ b/third_party/fiat/p256_64.h
3+
@@ -3,7 +3,7 @@
4+
#include "p256_field_64.br.c.inc"
5+
#include "../../crypto/internal.h"
6+
7+
-#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) && defined(__x86_64__)
8+
+#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) && defined(__x86_64__) && !defined(__MINGW32__)
9+
extern "C" {
10+
void fiat_p256_adx_mul(uint64_t*, const uint64_t*, const uint64_t*);
11+
void fiat_p256_adx_sqr(uint64_t*, const uint64_t*);
12+
@@ -181,7 +181,7 @@
13+
*/
14+
static FIAT_P256_FIAT_INLINE void fiat_p256_mul(fiat_p256_montgomery_domain_field_element out1, const fiat_p256_montgomery_domain_field_element arg1, const fiat_p256_montgomery_domain_field_element arg2) {
15+
// NOTE: edited by hand, see third_party/fiat/README.md
16+
-#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) && defined(__x86_64__)
17+
+#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) && defined(__x86_64__) && !defined(__MINGW32__)
18+
if (CRYPTO_is_BMI1_capable() && CRYPTO_is_BMI2_capable() &&
19+
CRYPTO_is_ADX_capable()) {
20+
fiat_p256_adx_mul(out1, arg1, arg2);
21+
@@ -497,7 +497,7 @@
22+
*/
23+
static FIAT_P256_FIAT_INLINE void fiat_p256_square(fiat_p256_montgomery_domain_field_element out1, const fiat_p256_montgomery_domain_field_element arg1) {
24+
// NOTE: edited by hand, see third_party/fiat/README.md
25+
-#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) && defined(__x86_64__)
26+
+#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) && defined(__x86_64__) && !defined(__MINGW32__)
27+
if (CRYPTO_is_BMI1_capable() && CRYPTO_is_BMI2_capable() &&
28+
CRYPTO_is_ADX_capable()) {
29+
fiat_p256_adx_sqr(out1, arg1);

0 commit comments

Comments
 (0)