diff --git a/build.rs b/build.rs index 9843ad8aa..573075489 100644 --- a/build.rs +++ b/build.rs @@ -346,7 +346,29 @@ fn ring_build_rs_main(c_root_dir: &Path, core_name_and_version: &str) { // we want to optimize for minimizing the build tools required: No Perl, // no nasm, etc. let generated_dir = if !is_git { - c_root_dir.join(PREGENERATED) + let pregenerated_dir = c_root_dir.join(PREGENERATED); + if target.os == WINDOWS + && target.env == "msvc" + && env::var_os("RULES_RUST_BAZEL_BUILD_SCRIPT_RUNNER").is_some() + { + let mut pending = vec![(pregenerated_dir.clone(), out_dir.clone())]; + while let Some((src_dir, dst_dir)) = pending.pop() { + fs::create_dir_all(&dst_dir).unwrap(); + for entry in fs::read_dir(&src_dir).unwrap() { + let entry = entry.unwrap(); + let src_path = entry.path(); + let dst_path = dst_dir.join(entry.file_name()); + if entry.file_type().unwrap().is_dir() { + pending.push((src_path, dst_path)); + } else { + fs::copy(&src_path, &dst_path).unwrap(); + } + } + } + out_dir.clone() + } else { + pregenerated_dir + } } else { generate_sources_and_preassemble( &out_dir, @@ -569,6 +591,15 @@ fn configure_cc(c: &mut cc::Build, target: &Target, c_root_dir: &Path, include_d let _ = c.include(c_root_dir.join("include")); let _ = c.include(include_dir); + let _ = c.include(c_root_dir.join("third_party").join("fiat")); + if compiler.is_like_msvc() { + let _ = c.include(c_root_dir.join("crypto").join("curve25519")); + let _ = c.include(c_root_dir.join("crypto").join("limbs")); + let _ = c.include(c_root_dir.join("crypto").join("fipsmodule").join("aes")); + let _ = c.include(c_root_dir.join("crypto").join("fipsmodule").join("bn")); + let _ = c.include(c_root_dir.join("crypto").join("fipsmodule").join("ec")); + let _ = c.include(c_root_dir.join("crypto").join("poly1305")); + } for f in cpp_flags(&compiler) { let _ = c.flag(f); } diff --git a/crypto/curve25519/curve25519.c b/crypto/curve25519/curve25519.c index 99d7d7fbb..2f69ad560 100644 --- a/crypto/curve25519/curve25519.c +++ b/crypto/curve25519/curve25519.c @@ -47,11 +47,11 @@ #if defined(__GNUC__) #pragma GCC diagnostic ignored "-Wpedantic" #endif -#include "../../third_party/fiat/curve25519_64.h" +#include "curve25519_64.h" #elif defined(OPENSSL_64_BIT) -#include "../../third_party/fiat/curve25519_64_msvc.h" +#include "curve25519_64_msvc.h" #else -#include "../../third_party/fiat/curve25519_32.h" +#include "curve25519_32.h" #endif diff --git a/crypto/curve25519/curve25519_64_adx.c b/crypto/curve25519/curve25519_64_adx.c index 88964a9dd..b660f55f4 100644 --- a/crypto/curve25519/curve25519_64_adx.c +++ b/crypto/curve25519/curve25519_64_adx.c @@ -19,5 +19,5 @@ #pragma GCC diagnostic ignored "-Wpedantic" #pragma GCC diagnostic ignored "-Wsign-conversion" -#include "../../third_party/fiat/curve25519_64_adx.h" +#include "curve25519_64_adx.h" #endif diff --git a/crypto/fipsmodule/ec/p256.c b/crypto/fipsmodule/ec/p256.c index 0117916da..4224d1192 100644 --- a/crypto/fipsmodule/ec/p256.c +++ b/crypto/fipsmodule/ec/p256.c @@ -50,11 +50,11 @@ #if defined(__GNUC__) #pragma GCC diagnostic ignored "-Wpedantic" #endif -#include "../../../third_party/fiat/p256_64.h" +#include "p256_64.h" #elif defined(OPENSSL_64_BIT) -#include "../../../third_party/fiat/p256_64_msvc.h" +#include "p256_64_msvc.h" #else -#include "../../../third_party/fiat/p256_32.h" +#include "p256_32.h" #endif