| |
| |
| |
| @@ -346,7 +346,27 @@ |
| // 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" |
| + { |
| + 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, |
| @@ -561,7 +581,13 @@ |
| let compiler = c.get_compiler(); |
| // FIXME: On Windows AArch64 we currently must use Clang to compile C code |
| let compiler = if target.os == WINDOWS && target.arch == AARCH64 && !compiler.is_like_clang() { |
| - let _ = c.compiler("clang"); |
| + // Keep inherited MSVC flags compatible with the selected Clang driver. |
| + let clang = if compiler.is_like_msvc() { |
| + "clang-cl" |
| + } else { |
| + "clang" |
| + }; |
| + let _ = c.compiler(clang); |
| c.get_compiler() |
| } else { |
| compiler |
| @@ -569,6 +595,15 @@ |
| |
| 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); |
| } |
| |
| |
| |
| |
| @@ -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 |
| |
| |
| |
| |
| |
| |
| @@ -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 |
| |
| |
| |
| |
| @@ -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 |
| |
| |
|
|